Javascript 如何让鼠标滚轮事件在jQuery中只触发一次?
因此,每当用户通过鼠标滚轮上下滚动时,我只想启动一次函数。请参阅:。问题是,即使我有e.preventDefault(),该函数仍会多次激发 目标是当用户向上或向下滚动时,该函数只触发一次。与此类似 以下是我目前掌握的代码: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
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);
}