これは、スクロール イベントが継続的に発生するためです。したがって、マウス ホイールを回してから停止しても、それは 1 つのイベントに相当しません。マウスホイール ハンドラーに a を追加してみてくださいconsole.log("mouse scrolled")
。私の言いたいことがすぐにわかります。
試みていることを達成するには、何らかの方法で妥協する必要があります。ハンドラーで使用し、タイムアウト期間後に (コールバックで)イベントsetTimeout
をトリガーすることをお勧めします。最初のスクロール イベントが期限切れになる前に 2 番目のスクロール イベントが発生した場合は、最初のスクロール イベントをキャンセルしてから再開します。これは、ユーザーがスクロールしてからスクロールを停止するのと同じです...そしてトリガーします。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);
}
乾杯