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应用于login页面的问题及解决
Oct 17 Javascript
JavaScript 设计模式之组合模式解析
Apr 09 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
Jquery根据浏览器窗口改变调整大小的方法
Feb 07 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 Javascript
JS关于刷新页面的相关总结
May 09 Javascript
js防抖和节流的深入讲解
Dec 06 Javascript
微信小程序npm引入vant-weapp的踩坑记录
Aug 01 Javascript
使用vue制作滑动标签
Sep 21 Javascript
解决vue自定义全局消息框组件问题
Nov 22 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
Jul 28 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
PHP中的加密功能
2006/10/09 PHP
十天学会php之第二天
2006/10/09 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
python的keyword模块用法实例分析
2015/06/30 Python
Python实现简单的四则运算计算器
2016/11/02 Python
Python实现的爬虫功能代码
2017/06/24 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
python中os包的用法
2020/06/01 Python
python中xlutils库用法浅析
2020/12/29 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
财务学生的职业生涯发展
2014/02/11 职场文书
办公室主任职责范本
2014/03/07 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
公司踏青活动方案
2014/08/16 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技