1

ウィンドウがスクロールされる27pxごとに何かをしたい。scrollイベントハンドラー内に配置された次のコードを作成しました。

scrollSpy++
if (scrollSpy > 27) {
    scrollSpy = 0;
    console.log("27px scrolled");
}

しかし、どういうわけかそれは機能していません。
スクロールが非常に遅いと、イベントはかなり定期的にトリガーされますが (実際に 27 ピクセル以降かどうかはわかりません)、高速でスクロールすると、イベントはランダムにトリガーされるか、まったくトリガーされないようです。

scrollエラーは、スクロールされたすべてのピクセルに対してイベントがトリガーされるという仮定にあると思います。これは、scrollSpy++メソッドが機能するための要件であるためです。

もちろん、それが本当にエラーなのかどうかはわかりません。これを正しく行うにはどうすればよいですか?

注: この質問はこの質問の複製ではありません受け入れられた回答はリールを対象としているためです。


編集:
答えに基づいて、私はこのif文を書きました:

if (window.pageYOffset % 27 === 0) {
    // do something
}

しかし、まだ機能していません。速くスクロールすると、機能が失敗します。したがって、scrollイベントがトリガーされる方法と関係があります。これに対する解決策を知っていますか?setTimeoutそれともsetInterval多分?

4

2 に答える 2

2

あなたの仮定は正しいです。いくらか確認したほうがいい

document.documentElement.scrollTop + document.body.scrollTop

関数の呼び出し間で変化します。増加している場合、ユーザーは下にスクロールしており、その逆も同様です。

この知識を使用して、自分がしていることをいつ行うかを決定します。

于 2013-03-06T00:14:20.190 に答える
1

いいえ、scrollスクロールされたピクセルごとにイベントがトリガーされるわけではありません。とにかく、MDN のドキュメントでwindow.pageYOffset説明されているように、必要に応じてフォールバックを使用して代わりに使用し、各イベントでその値がどの方向にどのくらい変化するかを確認できます。pageYOffsetscroll

于 2013-03-06T00:13:26.320 に答える