zoukankan      html  css  js  c++  java
  • 全屏滚动的原理

    下面代码是用vue来写的

    1、HTML结构

     1 <template>
     2     <div id="wrap">
     3         <div id="main">
     4             <div class="page">1</div>
     5             <div class="page">2</div>
     6             <div class="page">3</div>
     7             <div class="page">4</div>
     8         </div>
     9     </div>
    10 </template>

     

    2、CSS样式

    wrap块为窗口可看到的部分,通过absolute等属性设置占满窗口,并为其设置为:overflow:hidden属性,使得窗口不出现滚动条,只显示窗口大小的一页内容。

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

     1 <style lang="less" scoped>
     2 #wrap{
     3     position: absolute;
     4     top: 0;
     5     bottom: 0;
     6     left: 0;
     7     right: 0;
     8     overflow:hidden;
     9     background:rgb(15, 221, 211);
    10     #main{
    11         width:100%;
    12         position:relative;
    13         .page{
    14             width:100%;
    15             margin:0;
    16             font-size: 20px;
    17             &:nth-child(1) {
    18                 background:rgb(195, 185, 240);
    19             }
    20             &:nth-child(2) {
    21                 background: rgb(15, 221, 211);
    22             }
    23             &:nth-child(3) {
    24                 background: rgb(236, 173, 217);
    25             }
    26             &:nth-child(4) {
    27                 background: rgb(241, 161, 141);
    28             }
    29         }
    30     }
    31 }
    32 </style>

    3、JavaScript代码逻辑(对滚动事件的函数绑定

    要考虑到鼠标滚动事件的兼容性:

    (1)大多数浏览器提供了mousewheel事件

    (2)Firefox 3.5+不支持,但支持相同作用的事件:DOMMouseScroll

    (3)滚动属性值的区别:

      ① mousewheel事件:event.wheelDelta 返回的如果是正值说明滚轮是向上滚动
      ② DOMMouseScroll事件:event.detail 返回的如果是负值说明滚轮是向上滚动

    同时每页高度为 document.body.clientHeight+px,代码如下

     1 <script>
     2 export default {
     3     data() {
     4         return {
     5             now: 0,
     6             startTime: 0,
     7             endTime: 0,
     8             length: 0,
     9         }
    10     },
    11     mounted() {
    12         this.length = document.body.clientHeight;
    13         var pages = document.getElementsByClassName('page');
    14         for(let i = 0; i<pages.length; i++) {
    15             pages[i].style.height = this.length + 'px'
    16         }
    17         /* 区分浏览器
    18             大多数浏览器提供了mousewheel事件,
    19             Firefox 3.5+不支持,但支持相同作用的事件:DOMMouseScroll; 
    20         */
    21         if(navigator.userAgent.toLowerCase().indexOf('firefox') != -1) {
    22             document.addEventListener('DOMMouseScroll', this.scrollFun);
    23         }else if(document.addEventListener){
    24             document.addEventListener('mousewheel', this.scrollFun, false)
    25         }else if(document.attachEvent){ // IE
    26             document.attachEvent("onmousewheel", this.scrollFun);
    27         }else {
    28             document.onmousewheel = this.scrollFun;
    29         }
    30     },
    31     methods: {
    32         scrollFun(e){
    33             var main = document.getElementById('main');
    34             this.startTime = new Date().getTime();
    35             var event = e || window.event;
    36             /*  mousewheel事件:event.wheelDelta 返回的如果时正值说明滚轮是向上滚动的;
    37                 DOMMouseScroll事件:event.detail 返回的如果时负值说明滚轮是向上滚动,
    38                 每页高度为 document.body.clientHeight+px;
    39             */
    40             var dir = event.wheelDelta || -event.detail;
    41             if(this.startTime - this.endTime > 200) {
    42                 if(dir > 0 && this.now > -3 * this.length) {
    43                     this.now -= this.length;
    44                     main.style.top = this.now + 'px';
    45                     this.endTime = new Date().getTime(); 
    46                 }else if(dir < 0 && this.now < 0){
    47                     this.now += this.length;
    48                     main.style.top = this.now + 'px';
    49                     this.endTime = new Date().getTime(); 
    50                 }
    51             }else {
    52                 // event.preventDafault();
    53             }
    54         }
    55     }
    56 }
    57 </script>

     

     

    以上代码参考大神,并做了部分改动

     

  • 相关阅读:
    感悟
    shadow classification
    interpolation
    c语言调试技巧
    注册博客园
    用jQuery实现图片预加载和等比例缩小,大图可以点击关闭
    焦点图,带数字显示,支持常见浏览器
    又一个jquery轮播效果,焦点图,带数字显示序号,这个可以添加对应标题在图片上,支持主流浏览器
    纯css下拉菜单,支持CSS3圆角
    Jquery 下拉菜单,可以设置颜色,支持CSS3圆角
  • 原文地址:https://www.cnblogs.com/daheiylx/p/14144680.html
Copyright © 2011-2022 走看看