animate() 更新速度不够快

animate() not updating fast enough

本文关键字:不够 速度 更新 animate      更新时间:2023-09-26

我正在制作一个保留在页面顶部的导航栏。当用户向下滚动时,此栏将缩小,当用户返回到页面顶部时,导航栏将返回到其原始尺寸。

问题:当用户向下滚动时,导航栏会按预期收缩。但是,如果用户快速滚动回页面顶部,导航栏将保持收缩状态,并且 scrollTop() 回调函数中的 animate() 函数会在几秒钟后触发。

为了调试它,我包含了console.log($(window).scrollTop());,告诉我用户在页面上的当前位置。我获得console.log输出的速度与用户滚动一样快。 {console.log('animated');应该在动画完成后触发,直到几秒钟后才会出现console.log($(window).scrollTop());输出0

如何在用户向上滚动时让animate()快速响应?

JS代码

var navBar = $('#navbar-inner');
var top = navBar.css('top');
$(window).scroll(function() {
    console.log($(window).scrollTop());
    if($(this).scrollTop() > 50) {
        navBar.animate({'marginTop':'-20', 'height':'60'}, 300);
    } else {
        navBar.animate({'marginTop':'0', 'height':'80'}, 300, function() 
            {console.log('animated');});
    }
});

(发布我的评论作为答案)

使用 .stop() 在开始新动画之前停止任何正在进行的动画。

我以前遇到过这种动画比用户操作持续时间更长的问题。你只需要停止动画,比如

navBar.stop(true, true).animate(...);

为了更好地理解 stop(),这里是链接 http://api.jquery.com/stop/。希望对你有帮助