如何检测浏览器何时完成了视图更新(重新布局,应用任何更改的CSS)
How to detect when the browser has finished updating the view (re-layout, apply any changed CSS)
我有一个代码,我想运行它看起来像这样的伪代码:
-
执行其他操作
问题是,我需要不做'其他动作',直到我确定浏览器已经实际呈现更改后的CSS,并将对用户可见。
虽然Javascript是单线程的,如果'其他动作'阻止Javascript进一步执行,我认为浏览器仍有望能够更新视图与新的CSS值设置在第1步,即使Javascript本身被阻止-但这似乎没有发生(CSS的变化不显示,直到第2步之后-在这种情况下,远程服务调用-完成)。
添加到Grezzo的注释中,您可以使用JS超时0来确保前一行代码已经完成执行。这是有效的,因为它将setTimeout闭包中的任何内容放在要运行的代码内部队列的最后。例如
// Update CSS
$('#mydiv').css({'position' : 'relative', 'top' : 0});
setTimeout(function() {
funcToRunAfterUIUpdate()
}, 0);
我在StackOverflow上太笨了,不能发布链接,我想,否则你可以在这里阅读"掌握刷新()方法"部分:http://cubiq.org/iscroll-4
"这里我们将刷新调用设置为零超时,这样我们就给了浏览器时间来刷新自己,并且正确地采用了新元素的尺寸。还有其他方法可以确保浏览器实际更新了DOM,但到目前为止,零超时已被证明是最可靠的。"
如果你把Javascript代码放到页面的标题部分,那么Javascript将在网页内容加载之前运行。如果你将Javascript代码放在网页主体部分的函数之外,那么Javascript将在页面加载时运行(当页面加载到达代码时)。在这两种情况下,整个网页都不会被加载-特别是当页面包含大量图像时。
在这里您可以获得更多关于页面事件的信息。
http://javascript.about.com/library/bltut31.htm有两个独立的javascript文件....在你想要改变css的地方添加一个css,另一个放在页面底部,就在body标签之前,这将确保你的js在页面加载后执行
您可以使用setTimeOut()
调用您的远程服务调用函数,从而为浏览器提供非常小的时间间隔,以便在执行保留渲染的函数之前进行渲染吗?
你有例子吗?也许jsFiddle ?
- 访问布局信息是否也会导致浏览器重排
- 使用agility.js进行页面布局和合成
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 如何实现此布局
- 有没有一个javascript图形绘制库可以进行气球树布局
- vaadin:使用自定义布局集成angular js
- 布局中的项目管理
- 如何操作d3js树布局
- 在HTML/JavaScript中,有没有一种方法可以在图像开始加载时知道图像的最终布局尺寸
- 在链接d3强制布局中添加和删除类
- 为什么jquery悬停在jsfiddle中可以工作,而在我的html布局中却不能
- 骨干木偶-布局视图僵尸
- 以下数据布局在设置显示上向上移动:无
- Gridster停止:获取新的画布布局,而不是1个小部件
- 内部布局Marionette布局
- 如何使用布局管理器重新排序/排序嵌套视图而不重新渲染
- 使用新数据重新提交D3强制定向布局
- 图形布局:重新布局,保留图形的形状
- 在径向树布局中拖动节点组,单击时不跳转到新位置
- Angularjs -在uirouter中添加新的布局文件