javascript - 窗口滚动功能滞后

标签 javascript jquery

我有一个根据网页位置定位 div 的函数。

function calcNav(){
    var b = $('#breadcrumb').offset().top;
    var w = $(window).scrollTop();
    var x = b - w;
    //console.log('breadcrumb from top = ' + b + ' window scrolled = ' + w + ' position of nav = ' + x);
    $('.sub-nav').css('top', x);
}
calcNav();
$(window).scroll(calcNav);

该函数运行良好,我唯一的问题是,由于它不断渲染,我的页面速度显得有点滞后 - 有什么方法可以在滚动结束时而不是在滚动期间运行该函数?

最佳答案

我建议您将其与 setTimeout 结合使用并添加少量毫秒:

var scrollTimeout;
$(window).scroll(function() {
    clearTimeout( scrollTimeout );
    scrollTimeout = setTimeout( calcNav, 50 );
});
在这种情况下,

clearTimeout 用于在下一个滚动事件触发时间小于 50 毫秒时不触发上一个调用,如果您认为用户滚动速度会变慢,您可以增加该值,例如增加到 100 毫秒等.

关于javascript - 窗口滚动功能滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087024/

相关文章:

javascript - JQuery 未使用 $ ('#22/1' 创建对象)?

javascript - jQuery 代码仅在添加了alert() 后才有效

javascript - 如何在python上三次单击以选择一个段落?

javascript - 将 div 放置在具有起始 Angular 和结束 Angular 圆周围

javascript - 如何在验证时从选择字段中删除类错误

javascript - 在服务器端将集合 AS 文件从文件系统转换为 gridFS

javascript - 通过 nodemailer 向多个收件人发送电子邮件

javascript - 如何使用 jQuery 将 span 标签添加到选定的文本并将更改永久保存在本地 html 文件中?

javascript - 在javascript中遍历DOM

php - 如何使用jQuery在父窗口中提交表单而不刷新父窗口的内容(Ajax提交)