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 相关文章推荐
JS动画效果打开、关闭层的实现方法
May 09 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 Javascript
jquery动态切换背景图片的简单实现方法
May 14 Javascript
分享JavaScript监听全部Ajax请求事件的方法
Aug 28 Javascript
如何学JavaScript?前辈的经验之谈
Dec 28 Javascript
tangram.js库实现js类的方式实例分析
Jan 06 Javascript
vue cli 3.0 使用全过程解析
Jun 14 Javascript
p5.js绘制创意自画像
Nov 04 Javascript
使用typescript改造koa开发框架的实现
Feb 04 Javascript
原生JS实现烟花效果
Mar 10 Javascript
JS继承实现方法及优缺点详解
Sep 02 Javascript
使用TS来编写express服务器的方法步骤
Oct 29 Javascript
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
配置支持SSI
2006/11/25 PHP
javascript some()函数用法详解
2014/11/13 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
js图片上传的封装代码
2017/08/01 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
python Tkinter版学生管理系统
2019/02/20 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Django models filter筛选条件详解
2020/03/16 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
以下的初始化有什么区别
2013/12/16 面试题
致铅球运动员广播稿精选
2014/01/12 职场文书
请假条范文大全
2014/04/10 职场文书
会议室标语
2014/06/21 职场文书
整改报告格式
2014/11/06 职场文书
房屋所有权证明
2015/06/19 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server