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 相关文章推荐
JavaScript高级程序设计
Dec 29 Javascript
jquery tools系列 expose 学习
Sep 06 Javascript
jQuery焦点图切换简易插件制作过程全纪录
Aug 27 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
微信小程序中实现一对多发消息详解及实例代码
Feb 14 Javascript
Ext JS 实现建议词模糊动态搜索功能
May 13 Javascript
jQuery实现一个简单的验证码功能
Jun 26 jQuery
JavaScript中click和onclick本质区别与用法分析
Jun 07 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
Jun 27 Javascript
layui table 列宽百分比显示的实现方法
Sep 28 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
Nov 07 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
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
小程序自定义日历效果
2018/12/29 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
python实现自动重启本程序的方法
2015/07/09 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
Python关于反射的实例代码分享
2020/02/20 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
浅析Python requests 模块
2020/10/09 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
xml有哪些解析技术?区别是什么
2016/04/26 面试题
竞选部门副经理的自荐书范文
2014/02/11 职场文书
食品销售计划书
2014/04/26 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
英文产品推荐信
2015/03/27 职场文书
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js