代码改变世界

不用等待图片加载的Onload方法

2012-02-17 20:57  边缘er  阅读(541)  评论(0)    收藏  举报

使用背景:页面含有大量嵌入式图片,实现不用等待图片加载完毕就可以对DOM操作。

function addLoadEvent(loadEvent,waitForImages) {
if(!isCompatible()) return false;
if(waitForImages) {
return addEvent(window, 'load', loadEvent);
}
var init = function() {
if (arguments.callee.done) return;
arguments.callee.done = true;
loadEvent.apply(document,arguments);
};
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", init, false);
}
if (/WebKit/i.test(navigator.userAgent)) {
var _timer = setInterval(function() {
if (/loaded|complete/.test(document.readyState)) {
clearInterval(_timer);
init();
}
},10);
}
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
if (this.readyState == "complete") {
init();
}
};
/*@end @
*/
return true;
}

这个方法来自《js DOM高级程序设计》,其中用到了addEvent方法。2个参数:第一个就是页面加载完(不包括图)要执行的js方法;第二个参数如果设置为true的话,就是调用原始的onload,也就是等待图片加载完成。

使用这个方法唯一需要注意的一点是,执行的js里边不要操作为加载完成的图片属性,比如宽高等。