封裝DOMContentLoaded事件
//保存domReady的事件隊列 eventQueue = [];//判斷DOM是否加載完畢 isReady = false; //判斷DOMReady是否綁定 isBind = false; /*執行domReady() * *@param {function} *@execute 將事件處理程序壓入事件隊列,并綁定DOMContentLoaded * 如果DOM加載已經完成,則立即執行 *@caller */ function domReady(fn){ if (isReady) { fn.call(window); } else{ eventQueue.push(fn); }; bindReady(); }; /*domReady事件綁定 * *@param null *@execute 現代瀏覽器通過addEvListener綁定DOMContentLoaded,包括ie9+ ie6-8通過判斷doScroll判斷DOM是否加載完畢 *@caller domReady() */ function bindReady(){ if (isReady) return; if (isBind) return; isBind = true; if (window.addEventListener) { document.addEventListener('DOMContentLoaded',execFn,false); } else if (window.attachEvent) { doScroll(); }; }; /*doScroll判斷ie6-8的DOM是否加載完成 * *@param null *@execute doScroll判斷DOM是否加載完成 *@caller bindReady() */ function doScroll(){ try{ document.documentElement.doScroll('left'); } catch(error){ return setTimeout(doScroll,20); }; execFn(); }; /*執行事件隊列 * *@param null *@execute 循環執行隊列中的事件處理程序 *@caller bindReady() */ function execFn(){ if (!isReady) { isReady = true; for (var i = 0; i < eventQueue.length; i++) { eventQueue[i].call(window); }; eventQueue = []; }; }; //js文件1 domReady(function(){ }); //js文件2 domReady(function(){ }); //注意,如果是異步加載的js就不要綁定domReady方法,不然函數不會執行, //因為異步加載的js下載之前,DOMContentLoaded已經觸發,addEventListener執行時已經監聽不到了
</pre>
本文由用戶 m5de 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!