我希望在页面加载后调用一些JS,这可能涉及延迟,因此我希望先加载页面以显示内容...但似乎在渲染完成之前就调用了onLoad处理程序中的代码。是否有更好的事件可以使用,可以在页面“完成”时触发?
澄清一下,我想在页面在屏幕上呈现后运行一些JS,所以实际上是一个“后-everything事件”。
我希望在页面加载后调用一些JS,这可能涉及延迟,因此我希望先加载页面以显示内容...但似乎在渲染完成之前就调用了onLoad处理程序中的代码。是否有更好的事件可以使用,可以在页面“完成”时触发?
澄清一下,我想在页面在屏幕上呈现后运行一些JS,所以实际上是一个“后-everything事件”。
Either attach a callback to window.onload
window.onload = function(){
// your code here
};
当所有资源都加载完成时,此代码将被触发(可能不是您想要的)。
或者将所有代码放在页面底部(在结束的body
标签之前)。该代码将在HTML解析时运行。
顺便提一下,这是jQuery代码。你会看到,它使用自定义事件处理程序来处理IE和其他浏览器,但将window.onload
作为备用方案:
// Mozilla, Opera and webkit nightlies currently support this event
if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", jQuery.ready, false );
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent( "onload", jQuery.ready );
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck();
}
}
onLoad
,但在任何浏览器中都无法正常工作... 当 JS 被调用时,我的基本 HTML 是 不可见 的,而且由于 JS 在进行一些繁重的操作,页面会停顿。这很可能是 JS 的错误使用方式,但无论如何,在方法触发之前,页面应该被渲染出来... 这就是我需要的。 - Mr. Boy和很多 JavaScript 一样,这取决于您使用的浏览器。
像 @Avitus 回答中所说,您是否查看了 JQuery 文档就绪事件的执行点?这已经被泛化到所有浏览器上。
"onload事件会等待所有二进制内容下载完成后再触发。在此之前不要逗猫玩。"
正如本文所述,它会在所有二进制内容下载完成后被调用,您需要使用jQuery的ready或自己的函数来监听ready事件。这个项目看起来很有趣。
有许多跨浏览器的实现,因此请使用jQuery或我链接到的那个项目。
我为我的库编写了自己的函数,它使用内部方法,因此无法单独使用,但可能会让您了解需要做什么。您可以在这里找到该函数。