私はwindowの 'onscroll'イベントのリスナーを持っています。そのハンドラでは、何がイベントをトリガしたかを何らかの形で把握する必要があります。イベントがアニメーションによってトリガされた場合、window.scrollTo(x、y)をトリガするアニメーションを実行していて、リスナは異なる動作をする必要があります。より正確には、アニメーションの実行中にユーザーがスクロールした場合、アニメーションを停止する必要があります。 window.scrollTo(x、y)をトリガするときにイベントハンドラにコンテキストを渡すことも可能ですか?これを達成するためのいくつかのハックの回避策がありますか?ここで'onscroll'イベントのソースを特定する
は私が達成しようとしているもののいくつかの擬似コードです:
let isAnimationRunning = false
function onScrollHandler(e) {
const isTriggeredByOnAnimationTick = // how to figure that one out???
if (isAnimationRunning && !isTriggeredByOnAnimationTick) {
stopAnimation()
}
// do something else
}
// called every key frame (requestAnimationFrame)
function onAnimationTick(scrollY) {
// will trigger onscroll handler at some point in time
window.scrollTo(0, scrollY)
}
window.addEventListener('scroll', onScrollHandler)
runAnimation(onAnimationTick)
私はすでにモバイル上のマウスホイールやタッチイベントのために別のハンドラを使用して考えました。
- 一つは、このように、タッチジェスチャーが終了した後に減速され、スクロール、モバイルデバイスではスクロールバー
- を経由してユーザーがスクロールするかどうか、を把握するために、別のハックを思い付くことがあります。しかし、そのアプローチと私は2つの問題に遭遇しましたonscollハンドラを使わずにスクロールイベントがいつ止まるかはわかりません。