javascript - jQuery 对scrollTop() 的响应缓慢

标签 javascript jquery

我一直在尝试制作调整高度导航,如下所示:http://www.kriesi.at/themes/enfold/

我已经非常接近了,如 jsfiddle 上所示:http://jsfiddle.net/magnusbrad/4DK3F/12/

<div id="nav" class="header">
nav here
<ul class="right">
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
</ul>
</div>

$(window).scroll(function () {
if ($(document).scrollTop() === 0) {
    $('#nav.header').animate({height:'140px'}, 500);
    $('ul.right').animate({'line-height':'140px'}, 500);
} else {
    $('#nav.header').animate({height:'40px'}, 500);
    $('ul.right').animate({'line-height':'40px'}, 500);
}
});

当您向下滚动时,动画效果完美,但是,当您滚动回页面顶部时,更新并运行 else 语句需要大约 10 秒的时间。为了使该操作更快、实时发生,我缺少什么?

最佳答案

问题是 .animate() 每次被调用时都会添加到队列中。因此,当您从顶部滚动时,每个滚动事件的另一个动画都会添加到动画队列中。然后,当您返回顶部时, .animate({height:'140px'}, 500) 动画将添加到队列末尾,这意味着它只会在所有其他动画已经发生(每个动画需要 500 毫秒)。当然,您看不到这些其他动画的发生,因为您告诉 jQuery 对它们已有的值进行动画处理,因此视觉上没有发生任何事情。

http://api.jquery.com/animate/

尝试:

var atTop = !$(document).scrollTop();

$(window).scroll(function () {

    if ($(document).scrollTop() === 0 && !atTop) {

        $('#nav.header').animate({height:'140px'}, 500);
        $('ul.right').animate({'line-height':'140px'}, 500);

        atTop = true;

    } else if (atTop) {

        $('#nav.header').animate({height:'40px'}, 500);
        $('ul.right').animate({'line-height':'40px'}, 500);

        atTop = false;

    }
});

http://jsfiddle.net/4DK3F/32/

关于javascript - jQuery 对scrollTop() 的响应缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483736/

相关文章:

javascript - 如何在源更改时动态播放视频

javascript - 如何使用 jspdf-autotable 打印两个不同的表

c# - 显示真实值的复选框

javascript - Angular js 验证函数在验证的 api 调用完成之前返回

JavaScript 无法在 FF 或 IE 中运行

javascript - 查看此网络优化报告 - 我该如何解决?

javascript - 在不完全重新加载第二个 iframe 的情况下打开两个 iframe

javascript - jQuery 将 div 的高度设置为有多少文本

Javascript 鼠标悬停事件 Acting Squirrely

jquery - 如何使子导航消失而其他子导航在悬停时显示