【发布时间】:2012-08-24 08:40:36
【问题描述】:
我在尝试在 jQuery 加载后立即滚动浏览器窗口时遇到问题。内容加载正常,加载完成后调用的函数正在被调用。但是,如果我将超时设置为 300 毫秒,我只能让页面实际滚动:
frame.html("#box").load("loadedfile.php", function(){
setTimeout(function() {
$('html,body').animate({
scrollTop: $("#framed").offset().top
}, 750);
},300);
});
加载完成功能似乎在内容加载之后执行,但在浏览器能够滚动之前(因为承载脚本的页面最初的长度不足以激活滚动条)。
我的解决方法感觉草率,可能是。有没有更好的方法来处理这个?超时似乎不是处理此问题的可靠方法。
除了 .animate 之外,我还尝试过 window.scrollTo 以及 jQuery scrollTo 插件
【问题讨论】:
-
出于兴趣,您是否尝试将超时设置为 0?因为 JS 是单线程的,所以有时需要退出执行以允许 UI 更新(在这种情况下使用超时就可以了)。
-
这实际上对我今天有用。昨天一直把超时时间调低,设置成100ms还是不行。今天它现在可以同时使用 0 和 100。
-
...我刚刚重新启动,浏览器是否会延迟更新 UI?如果是这样,对于系统速度较慢的用户来说,这将是一个问题。
-
我认为简单地从你所在的函数返回就足以允许 UI 刷新,如果它愿意 - 延迟 0 并不意味着它会立即执行,只是它将“尽快”执行,这很可能是在其他事情完成之后。一般情况下,让其他事情也有一点延迟也没什么坏处,但我通常将其控制在 25-50 之间。
标签: javascript jquery dom scroll