为了账号安全,请及时绑定邮箱和手机立即绑定

mouseWhile 不管滚多远只触发一次,怎么设置

mouseWhile 不管滚多远只触发一次,怎么设置

艳妮子Yeah 2016-09-03 13:38:51
滚动鼠标滑轮,每次向下滚动要输出好多1,怎么确保不管滚多远都只输出一个1$(document).on("mousewheel DOMMouseScroll", function (e) {         var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? 1 : -1)) ||                     (e.originalEvent.detail && (e.originalEvent.detail > 0 ? -1 : 1));        if (delta<0) {            console.log("1");          }else{            console.log("2");         }    });
查看完整描述

3 回答

已采纳
?
stone310

TA贡献361条经验 获得超191个赞

  var a=0;      //本次的getTime()
  var b=0;      //上一次的getTime()
  var flag=5;   //设定一个判断变量,保证在条件下console.log只执行一次
$(document).on("mousewheel DOMMouseScroll", function (e) {
    b=a;       //b赋值为上一次的getTime()
    a=new Date().getTime();   //a赋值为本次的getTime()
    var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ?1  : -1)) ||
              (e.originalEvent.detail && (e.originalEvent.detail > 0 ?-1 : 1));
    if(a-b<=300){     //如果两次getTime()差距在300ms以内,可以视作在连续滚动
        if(delta<0 && delta!=flag){    //保证delta只执行一次,连续滚动中第二次滚动,delta==flag,即不成立
            console.log("1")
            flag=delta               
        }else if(delta>0 && delta!=flag){
            console.log("2")
            flag=delta
        };
    }else{                   //非连续滚动下,即getTimer差距300以上
        if(delta<0){
            console.log("1")
        flag=delta                        //防止等待时间过长出现2次
        }else{
            console.log("2")
         flag=delta
        };
    };
});

你看下是不是这种效果,这里写的意思是,当鼠标滚轴连续滚动时(每次滚动间隔300ms以内),只显示1次console.log,如果鼠标慢慢滚动(每次滚动间隔300以上),则每次滚动都显示console.log,300这个数可以改

查看完整回答
1 反对 回复 2016-09-04
  • 艳妮子Yeah
    艳妮子Yeah
    对对,这个时间差把我的问题解决了,非常感谢,我已经苦恼两天了,大神,请收下我的膝盖
  • 艳妮子Yeah
    艳妮子Yeah
    var k=1; var Height=document.body.clientHeight; var time1=0; var time2=0; $(document).on("mousewheel DOMMouseScroll", function (e) { time2=time1; time1=new Date().getTime(); //a赋值为本次的getTime() var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? 1 : -1)) || (e.originalEvent.detail && (e.originalEvent.detail > 0 ? -1 : 1)); if (time1-time2>=300&&$(window).scrollTop()<Height&&delta<0&&k==1) { $("html,body").animate({scrollTop:Height},1000); console.log(a-b); k=0; }else if($(window).scrollTop()<=Height&&delta<0){ k=1; } }); 大神,求救,我想用这种方式实现当整个网页处于第一屏时,滚动鼠标网页整屏滚动,其余正常。可是现在滚动鼠标时mousewhile控制页面滚动速度,不是animate。在谷歌浏览器上比较明显。
  • stone310
    stone310
    var Height = document.documentElement.clientHeight||document.body.clientHeight; 这里做个兼容
?
stone310

TA贡献361条经验 获得超191个赞

$(document).on("m这里on改成one,意思是只执行一次的绑定事件

查看完整回答
反对 回复 2016-09-04
  • 艳妮子Yeah
    艳妮子Yeah
    您好,我想每次滚动鼠标只输出一个1,不是第一次滚动输出再滚动就不输出了。因为滚动鼠标的程度影响触发mousewhile的次数,怎样做到从滚动鼠标到停止滚动只触发一次mousewhile呢
?
黑女2008

TA贡献75条经验 获得超32个赞

触发一次后移除事件

查看完整回答
反对 回复 2016-09-03
  • 艳妮子Yeah
    艳妮子Yeah
    您好,我现在还有一个疑问,因为滚动鼠标的程度影响触发mousewhile的次数,怎样做到从滚动鼠标到停止滚动只触发一次mousewhile呢,不知道我解释清楚了没
  • 黑女2008
    黑女2008
    你这需求有问题吧,代码怎么知道你总共需要滚动几次,你是滚动一次就不滚动了还是滚动100次不滚动啊,除非你确定总的滚动次数。你想啊,你都不知道要滚动多少次,怎么让程序在最后滚动才触发??程序怎么知道你是最后一次滚动呢?
  • 艳妮子Yeah
    艳妮子Yeah
    可能是我没解释清楚,我想设计一个滚屏的效果,当页面scrolltop=0的时候滚动鼠标页面滚动一屏。可是每次我滚动鼠标就会触发很多mousewhile事件,出现闪屏的现象。
点击展开后面2
  • 3 回答
  • 0 关注
  • 2617 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信