ユーザーがスクロールしたときにナビゲーションをアニメーション化する(画面外に)アニメーションを作成し、ユーザーがスクロールアップしたときにアニメーションを戻すコードがあります。safari 'バウンス'問題を解決する
しかし、ユーザーが高速でスクロールすると、ページが一番上に「バウンス」して、ユーザーが一番上にあるときにナビゲーションがアニメーション化されます。これを解決する方法はありますか?
私のコード
jQuery(document).ready(function($){
var didScroll;
var lastScrollTop = 0;
var delta = 5;
var navbarHeight = $('nav').outerHeight(true);
$(window).scroll(function(event) { didScroll = true; });
setInterval(function() {
if (didScroll) {
hasScrolled();
didScroll = false;
}
}, 100);
function hasScrolled() {
if($(window).width() > 768) {
var st = $(this).scrollTop();
if (Math.abs(lastScrollTop - st) <= delta)
return;
if (st > lastScrollTop) {
// Scroll Down
$('#screen-nav').removeClass('nav-down').addClass('nav-up');
} else {
$('#screen-nav').removeClass('nav-up').addClass('nav-down');
}
}
lastScrollTop = st;
}
});
私は、タイマーがスクロールイベントのデバウンスであると信じています。 –
(これは不幸な用語の衝突です:私はスクロールジッタのようなレート制限のようなデバウンスを意味しませんでした) –
はい、私はそれが周波数を減らし、スクロールがデルタに達するのを許す試みかもしれないと思った。スクロールイベントが発生したときに 'setTimeout'を開始し、既存のイベントをキャンセルすることで同じことができると思います。 – BoffinbraiN