国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

domReady的實現案例

2019-11-19 18:51:32
字體:
來源:轉載
供稿:網友

我們都知道JQ的 $(document).ready(fn) 方法??梢栽陧撁鏈蕚渚途w后才執行腳本,該方法相比傳統的window.onload 事件,它的優勢體現于onload事件是需要等到頁面中所有資源都加載完畢后才會觸發,而JQ的ready方法則會判斷DOM樹是否構建完畢。

onload相比較onreadystate事件的區別是,onreadystatechange事件是IE獨有的,并且在IE11之后不再支持,該事件是IE瀏覽器為特定的需要判斷資源加載的DOM元素指定的事件。

支持onreadystatechange事件的DOM元素必然有一個readyState屬性,該屬性的返回值,用于說明資源的加載情況。

一般而言,onreadystatechange事件更多用于Iframe的加載判斷。

最后我們需要了解的是當頁面包含iframe后,DOM樹的生成,以及DOMContentLoaded事件的觸發,onload事件的觸發,其流程對于IE非IE是不同的。

一般來說:

IE :解析index頁面 -> 解析iframe頁面 -> 觸發iframe的DOMContentLoaded事件 -> 觸發iframe頁面 onload事件 -> 觸發Index頁面的DOMContentLoaded事件 -> 觸發index頁面的onload事件。

!IE:解析index頁面 -> 觸發index頁面的DOMContentLoaded事件 -> 解析iframe頁面 -> 觸發iframe頁面的DOMContentLoaded事件 -> 觸發iframe的onload事件 -> 觸發index頁面的onload事件。

從這個流程,我們可以看出IE中,必須等待當前頁面的iframe加載解析完畢,當前頁面才能加載解析完畢,而在非IE中,iframe的加載與解析對當前頁面來言更多的是異步執行。

下面是具體的代碼:

(function(win){  'use strict';  var document = win.document,    readList = [],    // 等待執行的函數堆棧    flag = false;  var removeEvent = function(){    if(document.addEventListenner){      window.removeEventListenner('load',handle,false);    }else if(document.attachEvent){      window.detachEvent('onload',handle)      document.detachEvent('onreadystatechange',readyState);    }else{      window.onload = null;    }  },  handle = function(){    if(!flag){            while(readList.length){          readList[0].call();  //執行函數        readList.shift();  //刪除第一個數組元素      }      flag = true;      removeEvent();    }  },  readyState = function(){    if(document.readyState == 'complete'){      handle();    }    },  DOMContentloaded=function(){    if(document.readyState == 'complete'){      setTimeout(handle);  // setTimeout 會使用最短時間,該時間不同系統并不一樣。    }else if(document.addEventListenner){      document.addEventListenner('DOMContentLoaded',fn,false);      window.addEventListenner('load',handle,false);    }else if(document.attachEvent){      window.attachEvent('onload',handle);      document.attachEvent('onreadystatechange',readyState);  //onreadystatechange 事件在頁面中含有iframe的時候,它會等待iframe加載完畢才會觸發。            if(self === self.top){  // 當頁面不在iframe中則使用此種方式檢測doScroll方法是否可用。如果再iframe中則用onreadstatechange事件進行判斷。        (function(){          try{            document.documentElement.doScroll('left');          }catch(e){            setTimeout(arguments.callee,50);  //arguments.callee 是對當前函數的引用。            return ;          }          handle();        }());      }    }else{      window.onload = handle;    }  },  ready = function(fn){    readList.push(fn);  // 加入待處理的堆棧中。    DOMContentloaded();  };  win.domReady = ready;}(window));

代碼調用:

domReady(function(){   document.getElementById('box').innerHTML = (new Date().getTime() - date)/1000; });

以上這篇domReady的實現案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌江| 贵定县| 和顺县| 溧水县| 六枝特区| 西峡县| 姚安县| 托克逊县| 龙陵县| 抚顺市| 江安县| 通化市| 昂仁县| 三亚市| 许昌市| 隆回县| 腾冲县| 德清县| 龙江县| 辽中县| 沙雅县| 中江县| 永寿县| 平乡县| 永川市| 麻阳| 金秀| 德保县| 辛集市| 青川县| 千阳县| 乐清市| 汉阴县| 澄城县| 中阳县| 马公市| 辰溪县| 土默特左旗| 库尔勒市| 正阳县| 绥芬河市|