【发布时间】:2013-10-08 00:46:17
【问题描述】:
所以每次用户通过鼠标滚轮向上或向下滚动时,我只想触发一次函数。请参阅:jsFiddle Demo。问题是即使我有 e.preventDefault(),该函数仍然会触发多次。
目标是让函数在用户向上或向下滚动时仅触发一次。类似于这个site。
这是我目前的代码:
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;
}
【问题讨论】:
-
api.jquery.com/one - 或者,由于您实际上并未使用 jQuery,因此只需在处理程序中调用
removeEventListener。但我怀疑你说的你想要的并不是你想要的? -
事件可能不是只触发一次,而是存在某种超时,以防止过于频繁地采取行动。
标签: javascript jquery events mouseevent mousewheel