Javascript 如何让鼠标滚轮事件在jQuery中只触发一次?

Javascript 如何让鼠标滚轮事件在jQuery中只触发一次?,javascript,jquery,events,mouseevent,mousewheel,Javascript,Jquery,Events,Mouseevent,Mousewheel,因此,每当用户通过鼠标滚轮上下滚动时,我只想启动一次函数。请参阅:。问题是,即使我有e.preventDefault(),该函数仍会多次激发 目标是当用户向上或向下滚动时,该函数只触发一次。与此类似 以下是我目前掌握的代码: var sq = {}; sq = document; if (sq.addEventListener) { sq.addEventListener("mousewheel", MouseWheelHandler(), false); sq.addEvent

因此,每当用户通过鼠标滚轮上下滚动时,我只想启动一次函数。请参阅:。问题是,即使我有e.preventDefault(),该函数仍会多次激发

目标是当用户向上或向下滚动时,该函数只触发一次。与此类似

以下是我目前掌握的代码:

var sq = {};
sq = document;
if (sq.addEventListener) {
    sq.addEventListener("mousewheel", MouseWheelHandler(), false);
    sq.addEventListener("DOMMouseScroll", MouseWheelHandler(), false);
} else {
    sq.attachEvent("onmousewheel", MouseWheelHandler());
}

function MouseWheelHandler() {
    return function (e) {
        var e = window.event || e;
        var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
        if (delta < 0) {
            /* Scroll Down */
            e.preventDefault();
            console.log("Down. I want this to happen only once");

        } else {
            /* Scroll Up */
            console.log("up. I want this to happen only once");
            e.preventDefault();
        }
        return false;
    }
    return false;
}
var sq={};
sq=文件;
if(sq.addEventListener){
sq.addEventListener(“mousewheel”,MouseWheelHandler(),false);
sq.addEventListener(“DOMMouseScroll”,MouseWheelHandler(),false);
}否则{
sq.attachEvent(“onmousewheel”,MouseWheelHandler());
}
函数mouseweelHandler(){
返回函数(e){
var e=window.event | e;
var delta=数学最大值(-1,数学最小值(1,(e.车轮delta | |-e.细节));
if(δ<0){
/*向下滚动*/
e、 预防默认值();
log(“Down.I希望这种情况只发生一次”);
}否则{
/*向上滚动*/
log(“up.I希望这种情况只发生一次”);
e、 预防默认值();
}
返回false;
}
返回false;
}
是一个插件,您可以使用它

帮助我:

var isMoving=false;

$(document).bind("mousewheel DOMMouseScroll MozMousePixelScroll", function(event, delta) {
   event.preventDefault();
   if (isMoving) return;
   navigateTo();
});

function navigateTo(){
   isMoving = true;
   setTimeout(function() {
    isMoving=false;
   },2000);
}

基本上,您有一个isMoving变量,该变量的设置取决于您的动画或您所做的任何事情是否正在进行。即使用户在一次“轻弹”中使用鼠标滚轮滚动多次,函数也只触发一次。

-或者,由于您实际上没有使用jQuery,只需在处理程序内部调用即可。但我怀疑你所说的你想要的其实不是你想要的?可能不是因为事件只发生一次,但是有一种超时,防止了频繁的操作。上的
是首选的,因为jQuery 1.7,为什么你认为这只会触发一次?对不起,我更新了它…现在它在用户向上滚动时触发一次,然后在用户向下滚动时再次触发,如果只使用这个插件我告诉你,这很简单否决了这一点。首先,您必须更正代码。如果
不是
elseif
,则使用
else。使用
up==false
检查条件!向上
,而非
up=false
。无论如何,这是没有逻辑的。这将仅在向上滚动时触发。这样做时,它会依次返回“向上滚动”和“向下滚动”。下面是它在纠正错误后的表现:
var isMoving=false;

$(document).bind("mousewheel DOMMouseScroll MozMousePixelScroll", function(event, delta) {
   event.preventDefault();
   if (isMoving) return;
   navigateTo();
});

function navigateTo(){
   isMoving = true;
   setTimeout(function() {
    isMoving=false;
   },2000);
}