DOMContentLoaded事件
2012/1/31 15:23:16
今天查看百度空間源代碼,發現多了個util.js文件,打開看看。里面里面定義了addDOMLoadEvent。這是干什么用的?
仔細查看代碼,發現在Mozilla添加了DOMContentLoaded事件,這個在以前一直沒有用過。 if (document.addEventListener)
document.addEventListener("DOMContentLoaded", init, false);
好像就是為了兼容實現DOMContentLoaded事件。
網上找了點有關DOMContentLoaded的資料拿來看看。
DOMContentLoaded是firefox下特有的Event, 當所有DOM解析完以后會觸發這個事件。
與DOM中的onLoad事件與其相近。但onload要等到所有頁面元素加載完成才會觸發, 包括頁面上的圖片等等。
如果頁面的圖片很多的話, 從用戶訪問到onload觸發可能需要較長的時間, 而在Ajax運用中, 常常需要在onload中加入許多初始化的動作, 如果由于網絡問題引起的圖片加載過慢( 見: Ajax優化(2) -- lazierLoad img && js), 則必然影響用戶的體驗。
在這種情況下firefox的DOMContentLoaded事件, 恰恰是我們需要的。
目前,跨平臺的DOMContentLoaded的解決方案有很多, 比如jQuery, Prototype...等等, 其實現原理大同小異.
在項目中, 我使用了Prototype工具, 以往調用初始化的方法是: Event.observe(window, "load", init);
現在有了DOMContentLoaded, 可以替換成如下的方法: document.observe('contentloaded', init);
最新的prototype中自定義事件已經重新命名, 使用"dom:loaded" 代替了 “contentloaded”. document.observe('dom:loaded', init);
附:
Andrea Giammarchi的OnContent函數提供了一個跨平臺的DOMContentLoaded的解決方案My DOMContentLoaded Final Solution
文件名稱:DOMContentLoaded.js function onContent(f){ var a = onContent, b = navigator.userAgent, d = document, w = window, c = "onContent", e = "addEventListener", o = "opera", r = "readyState", s = "<scr".concat("ipt defer src='//:' on", r, "change='if(this.", r, "==\"complete\"){this.parentNode.removeChild(this);", c, ".", c, "()}'></scr", "ipt>"); a[c] = (function(o) { return function() { a[c] = function() {}; for (a = arguments.callee; ! a.done; a.done = 1) f(o ? o() : o) } })(a[c]); if (d[e]) d[e]("DOMContentLoaded", a[c], false); if (/WebKit|Khtml/i.test(b) || (w[o] && parseInt(w[o].version()) < 9))(function() { / loaded | complete / .test(d[r]) ? a[c]() : setTimeout(arguments.callee, 1) })(); else if (/MSIE/i.test(b)) d.write(s); };
util.js:
addDOMLoadEvent = (function(){
// create event function stack
var load_events = [],
load_timer,
script,
done,
exec,
old_onload,
init = function () {
done = true;
// kill the timer
clearInterval(load_timer);
// execute each function in the stack in the order they were added
while (exec = load_events.shift())
setTimeout(exec, 10);
if (script) script.onreadystatechange = '';
};
return function (func) {
下一頁
返回列表
返回首頁
主站蜘蛛池模板:
欧美jizzhd精品欧美|
英语老师解开裙子坐我腿中间|
女同久久另类99精品国产|
久久伊人色综合|
欧美一级做一a做片性视频|
亚洲高清免费在线观看|
网站正能量www正能量视频|
国产在线视频福利|
3d白洁妇珍藏版漫画第一章|
女人被男人躁的女爽免费视频|
久久久久无码精品国产app|
欧洲肉欲K8播放毛片|
亚洲欧美精品中字久久99|
看全色黄大色黄女片18女人|
国产91精品一区二区|
高清欧美性猛交xxxx黑人猛交|
国产精品亚洲视频|
91精品国产高清|
天堂а√在线官网|
一区二区在线免费视频|
手机看片一区二区|
久久婷婷人人澡人人爽人人爱|
棉袜足j吐奶视频|
亚洲成av人片在线观看无|
激情捆绑国语对白|
动漫美女www网站免费看动漫|
老司机天堂影院|
国产亚洲人成在线影院|
麻豆果冻国产91在线极品|
国产男人的天堂|
一级黄色香蕉视频|
国内精品久久久久久无码不卡|
人人爽天天碰天天躁夜夜躁|
综合网在线视频|
国产一区二区三区电影|
韩国福利影视一区二区三区|
国产成人精选免费视频|
3d动漫h在线观看|
国产精品亚洲αv天堂无码|
88av在线看|
国产综合色在线视频区|