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

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

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;
      }
      
    }

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值