我正在处理一个非常复杂的 .aspx 页面,其中充满了控件(Telerik、Ajax 等),这些控件在加载页面时都会展开、折叠、显示、隐藏等。由于这种渲染发生在客户端,并且根据用户的机器规范可能需要不同的时间长度,因此有没有办法检测所有(或部分)渲染何时发生(jQuery?),以便我可以针对特定的情况采取行动元素,知道它们已完全渲染?
最佳答案
JavaScript 是单线程的。传递给 setTimeout
的时间是最小值,但不是最大值,因此,如果您传递类似 10(ms) 的时间,则实质上是在说“在所有当前运行的代码完成后执行此代码”。
因此,如果所有控件都使用 $(document).ready()
来完成其任务,那么您所需要的就是:
$(document).ready(function() {
setTimeout(function() {
doStuff();
},10);
});
doStuff
将在传递给 $(document).ready
的所有函数运行后调用。然而,这并非万无一失。如果控件有自己的方法来检测文档是否已加载,或者执行自己的setTimeout()
,那么您就有麻烦了。问题在于 JavaScript 不保证 setTimeout 的执行顺序。有时您的代码可能会最后运行,有时它可能会在用于动画的 setTimeout
之前运行。
最后一个想法:如果所有动画都是使用 jQuery 完成的,那么效果将在单个队列中运行。在 doStuff
中,您可以添加某种动画 with a callback并相当确定回调将最后运行。
关于asp.net - 检测所有 HTML 页面渲染何时发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2042692/