js实现鼠标滚轮一下滑动一个页面

  • Post author:
  • Post category:其他


今天写项目需要实现一个功能,鼠标每滚动一次判断是否是往上滚动还是往下,每滚动一次切换一个页面。

html部分:

<body>
    <div id="wrap">
      <div style="background-color: #22b7e4" id="page1" class="page"></div>
      <div style="background-color: #70eec4" id="page2" class="page"></div>
      <div style="background-color: #e3e657" id="page3" class="page"></div>
      <div style="background-color: #8733b7" id="page4" class="page"></div>
      <div style="background-color: #c5274e" id="page5" class="page"></div>
    </div>
  </body>

css部分:

      *{
        margin: 0;
        padding: 0;
      }
      html,
      body{
        width: 100vw;
        overflow-y:hidden;
      }
      #wrap{
        position: absolute;
        width: 100%;
      }
      .page{
        width: 100%;
        height: 936px;
      }

js部分:

这里我们需要使用mousewheel监听事件

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

DOMMouseScroll事件中的 “event.detail” 属性值:返回的如果是负值说明滚轮是向上滚动

DOMMouseScroll是火狐浏览器中的写法

    //浏览器兼容
    if (navigator.userAgent.toLowerCase().indexOf("firefox") != -1) {
      document.addEventListener("DOMMouseScroll", scrollFun, false);
    } else if (document.addEventListener) {
      document.addEventListener("mousewheel", scrollFun, false);
    } else if (document.attachEvent) {
      document.attachEvent("onmousewheel", scrollFun);
    } else {
      document.onmousewheel = scrollFun;
    }

    let index = 1;
    let curIndex = 1; //记录当前的页面
    let wrap=document.querySelector("#wrap");
    let pageNum=document.querySelectorAll(".page").length;
    let hei = 936;
    //如果不加时间控制,滚动会过度灵敏,一次翻好几屏
    let startTime = 0, //翻屏起始时间
      endTime = 0,
      now = 0;
    
    //滚动事件处理函数
    function scrollFun(event) {
      startTime = new Date().getTime();
      let delta = event.detail || -event.wheelDelta;
      console.log(delta);
      //mousewheel事件中的 “event.wheelDelta” 属性值:返回的如果是正值说明滚轮是向上滚动
      //DOMMouseScroll事件中的 “event.detail” 属性值:返回的如果是负值说明滚轮是向上滚动
      if (endTime - startTime < -1000) {
        if (delta > 0 && parseInt(wrap.offsetTop) > -(hei * (pageNum - 1))) {
          //向下滚动
          index++;
          toPage(index);
        }
        if (delta < 0 && parseInt(wrap.offsetTop) < 0) {
          //向上滚动
          index--;
          toPage(index);
        }
        endTime = new Date().getTime();
      }
    }

    function toPage(idx) {
      if(idx!=curIndex){
        //jquery实现动画效果
        let delta = idx - curIndex;
        now = now - delta * hei;
        console.log(now);
        $("#wrap").animate(
          {
            top: now + "px",
          },
          500
        );
        curIndex=idx;
      }
      
    }



版权声明:本文为qq_58192506原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。