画面上の要素の可視性をチェックするコードがあります。ページをスクロールして表示されるとすぐに、カスタム イベントがトリガーされます。このカスタム イベントは、アニメーションを開始します。このアニメーションが何度も開始されるのを防ぐために、開始する関数は一度だけ開始されます。そのために、jQuery 関数 .one() を使用しました。
要素が表示されているかどうかを確認する関数:
checkScrollPos = function() {
if (objTopPos - scrollPos <= windowHeight / 2) {
$(document).trigger('objVisible');
}
}
イベントをリッスンする関数:
evtListener = function() {
//startAnimation() should only be started once
$(document).one(
{
'objVisible': function(event) {
startAnimation();
}
}
);
}
ここですべてが起こります:
$(document).ready(function() {
evtListener();
$(window).scroll(function () {
scrollPos = $(document).scrollTop();
checkScrollPos();
}
}
これですべて正常に動作しますが、checkScrollPos() 関数を拡張して、要素が再び見えなくなるかどうかも確認し、アニメーションを停止しました。それはうまくいきます。問題は、イベントがトリガーされると、イベントにバインドされた関数が 1 回だけ実行されることです。そのため、要素を表示してスクロールし、次に表示から外してから再度表示すると、アニメーションは再度実行されません (もちろん正しい動作です)。ここで、イベントが1回だけトリガーされるようにしたいと思いますが、要素が見えたり見えなくなったりするたびに、一度だけではありません。したがって、基本的には、何らかのリセットが必要です
$(document).one()
関数 – 要素が見えなくなるたびに、.one() 関数を再度使用できるようにします。それを行う方法はありますか?