jQuery のscroll()関数を使用すると、スクロール イベントがユーザー (マウス スクロール、スクローラーのドラッグ) または DOM エンジン (要素の追加または削除) によって作成されたかどうかを検出できます。DOM エンジンによって起動されたスクロール イベントを識別するにはどうすればよいですか。
この jsfiddleは、私が意図したことを明確に示しています。
jQuery のscroll()関数を使用すると、スクロール イベントがユーザー (マウス スクロール、スクローラーのドラッグ) または DOM エンジン (要素の追加または削除) によって作成されたかどうかを検出できます。DOM エンジンによって起動されたスクロール イベントを識別するにはどうすればよいですか。
この jsfiddleは、私が意図したことを明確に示しています。
これを処理する方法はたくさんありますが、信じられないほど公式なものは知りません。
簡単な方法の 1 つは、プログラムでスクロールを開始するときにトグルを設定し (クラスの設定など)、完了したらそれを削除することです。それがどのように機能するかを示すために、あなたのフィドルをフォークしました。
$("#scrollable")
.addClass('programatically-scrolling')
.scrollTo({
top: $("#scrollable").prop("scrollHeight") - $("#scrollable").innerHeight(),
left: 0
}, 1000, {
axis: 'y',
// Add a function to remove the toggle when the animation is complete
onAfter: function () {
$(this).removeClass('programatically-scrolling');
}
});
$("#scrollable").scroll(function (event) {
// This will be true when your $.scrollTo animation is going
// and false when you trigger the scroll with your mouse
console.log($(this).hasClass('programatically-scrolling'));
});
これに取り組む他の方法と、同じ質問をした他の人がいます。jQueryの特別なイベントを作成するのがおそらく最も楽しいでしょうが、私が概説した解決策はおそらく最も簡単です。