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在线看| 国产综合色在线视频区|