那是因为滚动事件是连续触发的。因此,如果您滚动鼠标滚轮然后停止,那不等于一个事件。尝试在您的鼠标滚轮处理程序中放置一个console.log("mouse scrolled")
,您很快就会明白我的意思。
你将需要以一种或另一种方式妥协来完成你正在尝试的事情。我建议setTimeout
在您的处理程序中使用并在超时持续时间后触发click
事件(在setTimeout
回调中)。如果第二个滚动事件在第一个到期之前出现,请取消第一个并重新启动它。这相当于用户滚动,然后停止滚动……然后触发click
.
- 编辑 -
这是相反的方法 - 触发您捕获的第一个鼠标滚轮事件的单击,然后忽略其余事件,直到用户停止滚动至少n
几毫秒,例如 500 毫秒。可能看起来粗略(意思是“未经测试”)...
var scrolled = false,
scrollTimeout;
$('#elem').bind('mousewheel', function(e){
// absorb scroll
e.preventDefault();
// Scrolled yet?
if(!scrolled){
// Note they've scrolled
scrolled = true;
// Click appropriate nav
$(e.delta < 0 ? '.left-nav' : '.right-nav').trigger("click");
}
// Reset the timer
clearTimeout(scrollTimeout);
// If the user stops scrolling for 500 millis, they can trigger click w/ next scroll
scrollTimeout = setTimeout(function(){
scrolled = false;
}, 500);
}
干杯