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 淡入淡出 png图在ie8下有黑色边框的解决方法
Mar 05 Javascript
jquery中each方法示例和常用选择器
Jul 08 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
js网页右下角提示框实例
Oct 14 Javascript
js实现双击图片放大单击缩小的方法
Feb 17 Javascript
Bootstrap实现响应式导航栏效果
Dec 28 Javascript
Angular 2应用的8个主要构造块有哪些
Oct 17 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
使用express+multer实现node中的图片上传功能
Feb 02 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
Aug 27 Javascript
ckeditor一键排版功能实现方法分析
Feb 06 Javascript
vue实现公告栏文字上下滚动效果的示例代码
Jun 16 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
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
Python 返回汉字的汉语拼音
2009/02/27 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
python实现装饰器、描述符
2018/02/28 Python
python getpass实现密文实例详解
2019/09/24 Python
python实现查找所有程序的安装信息
2020/02/18 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
python lambda的使用详解
2021/02/26 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
医生自荐信
2013/10/11 职场文书
创先争优制度
2014/01/21 职场文书
家长对老师的感言
2014/03/11 职场文书
绩效考核实施方案
2014/03/18 职场文书
2014年科协工作总结
2014/12/09 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
法制主题班会教案
2015/08/13 职场文书