• 全屏滚动的原理及实现


    之前用fullpage插件做过全屏滚动的页面,今天用js自己实现了一下,还蛮简单的微笑.

    首先html结构为

    [html] view plain copy
     
    1. <div id="wrap">  
    2.     <div id="main">  
    3.         <div id="page1" class="page"></div>  
    4.         <div id="page2" class="page"></div>  
    5.         <div id="page3" class="page"></div>  
    6.         <div id="page4" class="page"></div>  
    7.     </div>      
    8. </div>  

    wrap块为窗口可看到的部分,我们可以通过js获取窗口可视区的大小,并为其设置overflow: hidden属性,使得窗口不出现滚动条,只显示窗口大小的一页内容;

    设置main定位为relative,通过改变main块的top属性实现不同页面的切换,具体的css代码如下:

    [css] view plain copy
     
    1. html,body{  
    2. margin: 0;  
    3. padding: 0;  
    4. }  
    5. #wrap{  
    6.      100%;  
    7.     overflow: hidden;  
    8.     background: #ccc;  
    9. }  
    10. #main{  
    11.      100%;  
    12.     background: #ccc;  
    13.     position: relative;  
    14. }  
    15. .page{  
    16.     100%;  
    17.     margin:0;  
    18. }  
    19. #page1{  
    20.     background:#E4E6CE;  
    21. }  
    22. #page2{  
    23.     background:#6CE26C;  
    24. }  
    25. #page3{  
    26.     background:#BF4938;  
    27. }  
    28. #page4{  
    29.     background:#2932E1;  
    30. }  

    js代码的主要部分就是对滚动事件的函数绑定,大多数浏览器提供了 “mousewheel” 事件,Firefox 3.5+不支持,但支持相同作用的事件:”DOMMouseScroll”;

    mousewheel事件“event.wheelDelta” 属性值:返回的如果是正值说明滚轮是向上滚动;

    DOMMouseScroll事件“event.detail” 属性值:返回的如果是负值说明滚轮是向上滚动;每页高度为document.body.clientHeight+’px’;

    具体代码如下:

    [javascript] view plain copy
     
    1. var pages = document.getElementsByClassName("page");  
    2. var wrap = document.getElementById("wrap");  
    3. var len = document.documentElement.clientHeight;  
    4. var main = document.getElementById("main");  
    5. wrap.style.height = len + "px";  
    6. for(var i=0; i<pages.length; i++){  
    7.     pages[i].style.height = len + "px";  
    8. }  
    9. if(navigator.userAgent.toLowerCase().indexOf("firefox") != -1){  
    10.     document.addEventListener("DOMMouseScroll",scrollFun);  
    11. }else if(document.addEventListener){  
    12.     document.addEventListener("mousewheel",scrollFun,false);  
    13. }else if(document.attachEvent){  
    14.     document.attachEvent("onmousewheel",scrollFun);  
    15. }else{  
    16.     document.onmousewheel = scrollFun;  
    17. }  
    18. var startTime = 0;  
    19. var endTime = 0;  
    20. var now = 0;  
    21. function scrollFun(e){  
    22.     startTime = new Date().getTime();  
    23.     var event = e || window.event;  
    24.     var dir = event.detail || -event.wheelDelta;  
    25.     if(startTime - endTime > 1000){  
    26.         if(dir>0 && now > -3*len){  
    27.             now -= len;   
    28.             main.style.top = now +"px";  
    29.             endTime = new Date().getTime();  
    30.         }else if(dir<0 && now < 0){  
    31.             now += len;  
    32.             main.style.top = now +"px";  
    33.             endTime = new Date().getTime();  
    34.         }  
    35.     }else{  
    36.         event.preventDefault();      
    37.     }  
    38. }  
  • 相关阅读:
    rsync命令使用方法
    Mysql(MyISAM和InnoDB)及Btree和索引优化
    初级java程序员-各公司技能要求
    Redis学习笔记二 (BitMap算法分析与BitCount语法)
    HTTP、TCP、IP协议常见面试题
    Redis学习笔记一(Redis的详细安装及Linux环境变量配置和启动)
    java-部分精选面试题
    Python基础-TypeError:takes 2 positional arguments but 3 were given
    Python3.7中urllib.urlopen 报错问题
    几道关于springboot、springCloud的面试题。
  • 原文地址:https://www.cnblogs.com/mm2015/p/9095212.html
Copyright © 2020-2023  润新知