猿问

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

滚动鼠标滑轮,每次向下滚动要输出好多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"); 

        }
    });

艳妮子Yeah
浏览 2618回答 3
3回答

stone310

  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这个数可以改

stone310

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

黑女2008

触发一次后移除事件
随时随地看视频慕课网APP

相关分类

JQuery
我要回答