js上下视差滚动简单实现代码


Posted in Javascript onMarch 07, 2017

前言: 项目中让实现一个简单的上下视差滚动,就是当页面滑动到某一固定位置时,让上下两页面出现叠加效果,恢复时,展开恢复。

功能技术实现方式:元素定位,鼠标事件

思路1:

一开始想着设置滚动条监听事件,当到固定位置时下方元素设置relative属性(这样可保证不改变其原有样式而且可以实现元素位置的调整),于是就诞生出一下代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <style>
    body{
      margin: 0;
      padding: 0;
    }
    .div1{
      width: 100%;
      height: 500px;
      background: #FF0000;
      position: fixed;
      top: 0;
      left: 0;
    }
    .div2{
      width: 100%;
      margin-top: 500px;
      height: 1000px;
      background: #22B0FC;
      position: relative;
      z-index: 2;;
    }
  </style>
  <body>
    <div class="div1">1111111</div>
    <div class="div2">22222222222222</div>
  </body>
  <script src="jquery-1.8.3.min.js"></script>
  <script>
    $(document).ready(function () { 
      $(window).scroll(function () {
        var scrollTop=$(window).scrollTop();
        //$(window).scrollTop()这个方法是当前滚动条滚动的距离
        //$(window).height()获取当前窗体的高度
        //$(document).height()获取当前文档的高度
        $('.div2').css('top',-scrollTop);
      });
    });
  </script>
</html>

问题:运行以上代码就会发现有一个很明显的bug,虽然大体功能已经实现了,但是因为relative的元素不管如何移动,还是会占有原本的位置。然而我们的期望是,滚动条到达让下方元素底部时就不应该滑动了,如何解决呢?

思路2:

我思考了良久,但是仍然没发现可以让元素既不占位置,又不改变自身样式,所以我大胆放弃relative,选择absolute定位,这个就需要我们自己做样式的调整,具体代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <style>
    body{
      margin: 0;
      padding: 0;
    }
    .clearfix:after {
       content: '';
       display: block;
       clear: both;
      }
    .div1{
      width: 100%;
      margin: 0 auto;
      height: 500px;
      background: bisque;
      position: fixed;
      top: 0;
      left: 0;
    }
    .div1 div{
      width: 1200px;
      margin: 0 auto;
      height: 500px;
      background: #FF0000;
    }
    .div2{
      width: 1200px;
      margin: 0 auto;
      height: 1500px;
      background: #22B0FC;
      z-index: 20000;;
      margin-top: 500px;
    }
  </style>
  <body>
    <div class="div1 clearfix">
      <div>111111111111111111111111111111111111111</div>
    </div>
    <div class="div2">22222222222222</div>
  </body>
  <script src="jquery-1.8.3.min.js"></script>
  <script>
    var div2Height=Number($('.div2').offsetTop);
      var clientHeight=Number($(document).clientHeight);
      var totalHeight=div2Height-clientHeight;
      var objOffset=$('.div2').offset().top;
      var objOffsetLf=$('.div2').offset().left;
      $(document).ready(function () { //本人习惯这样写了
      $(window).scroll(function () {
        var scrollTop=$(window).scrollTop();
        var objHeight=objOffset-scrollTop;
        console.log(scrollTop);
         if(scrollTop>=0){
          $('.div2').css({'left':objOffsetLf,'top':objHeight,'position':'absolute','margin-top':'0px'});
        }else{
          $('.div2').css({'position':'static','margin-top':'500px'});
        }
      });
    });
  </script>
</html>

注意:①上半部分元素的位置需要保持不动②下半部分确保层级要高于上半部分③本代码针对的是上半部分固定,如果想让其跟着动,需要确保下半部分滚动速度要大于上半部分

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery简单体验
Jan 10 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
May 07 Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 Javascript
Vue响应式原理详解
Apr 18 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
Aug 08 Javascript
webpack中如何使用雪碧图的示例代码
Nov 11 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
vue基础之模板和过滤器用法实例分析
Mar 12 Javascript
Smartour 让网页导览变得更简单(推荐)
Jul 19 Javascript
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
js实现移动端轮播图滑动切换
Dec 21 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
js实现下一页页码效果
Mar 07 #Javascript
原生JS中slice()方法和splice()区别
Mar 06 #Javascript
浅析vue component 组件使用
Mar 06 #Javascript
js常用的继承--组合式继承
Mar 06 #Javascript
VUE开发一个图片轮播的组件示例代码
Mar 06 #Javascript
canvas仿iwatch时钟效果
Mar 06 #Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 #Javascript
You might like
SONY SRF-40W电路分析
2021/03/02 无线电
PHP新手上路(二)
2006/10/09 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php获取linux命令结果的实例
2017/03/13 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
Python的gevent框架的入门教程
2015/04/29 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
平面设计的岗位职责
2013/11/08 职场文书
汽车维修求职信
2014/06/15 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
单位考核聘任报告
2015/03/02 职场文书
期中考试后的感想
2015/08/07 职场文书
队列队形口号
2015/12/25 职场文书