日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可以在某些场合替代onload事件的domReady事件

發(fā)布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可以在某些场合替代onload事件的domReady事件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
load事件可以安全的執(zhí)行JS,因為該事件是在頁面完全加載完后才開始執(zhí)行(包括頁面內(nèi)的圖片、flash等所有元素),不會因為JS需要對某個DOM操作,而頁面還沒有加載該節(jié)點而引起錯誤。但是這種安全是需要付出代價的:如果某些圖片(或者一些別的東西)加載特別慢,那么load事件會等到很久之后才會觸發(fā)。

針對這個問題,一些JS框架提供了一些補充方法。如:jquery的$(document).ready()、mootools的domready事件。都是在頁面的DOM加載完畢后立即執(zhí)行,而不需要等待漫長的圖片下載過程。

如果不使用這些框架,怎樣實現(xiàn)自己的 document ready呢?請看以下一段代碼:
Javascript代碼
  • ??
  • function?__clear(timer){ ??
  • ????clearTimeout(timer); ??
  • ????clearInterval(timer); ??
  • ????return?null; ??
  • }; ??
  • ??
  • function?__attach_event(evt,?callback)?{ ??
  • ????if?(window.addEventListener)?{ ??
  • ????????window.addEventListener(evt,?callback,?false);? ??
  • ????}?else?if?(window.attachEvent)?{ ??
  • ????????window.attachEvent("on"?+?evt,?callback); ??
  • ????} ??
  • } ??
  • ??
  • function?__domReady(f)?{ ??
  • ????//?假如?DOM?已經(jīng)加載,馬上執(zhí)行函數(shù) ??
  • ????if?(__domReady.done)?return?f(); ??
  • ????//?假如我們已經(jīng)增加了一個函數(shù) ??
  • ????if?(__domReady.timer)?{ ??
  • ????????//?把它加入待執(zhí)行函數(shù)清單中 ??
  • ????????__domReady.ready.push(f); ??
  • ????}?else?{ ??
  • ????????//?為頁面加載完畢綁定一個事件, ??
  • ????????//?以防它最先完成。使用addEvent(該函數(shù)見下一章)。 ??
  • ????????__attach_event("load",?__isDOMReady); ??
  • ????????//?初始化待執(zhí)行函數(shù)的數(shù)組 ??
  • ????????__domReady.ready?=?[f]; ??
  • ????????//?盡可能快地檢查DOM是否已可用 ??
  • ????????__domReady.timer?=?setInterval(__isDOMReady,?100); ??
  • ????} ??
  • } ??
  • function?__isDOMReady()?{ ??
  • ????//?如果我們能判斷出DOM已可用,忽略 ??
  • ????if?(__domReady.done)?return?false; ??
  • ????//?檢查若干函數(shù)和元素是否可用 ??
  • ????if?(document?&&?document.getElementsByTagName?&&?document.getElementById?&&?document.body)?{ ??
  • ????????//?如果可用,我們可以停止檢查 ??
  • ????????__clear(__domReady.timer); ??
  • ????????__domReady.timer?=?null; ??
  • ????????//?執(zhí)行所有正等待的函數(shù) ??
  • ????????for?(?var?i?=?0;?i?<?__domReady.ready.length;?i++?)?{ ??
  • ????????????__domReady.ready[i](); ??
  • ????????} ??
  • ????????//?記錄我們在此已經(jīng)完成 ??
  • ????????__domReady.ready?=?null; ??
  • ????????__domReady.done?=?true; ??
  • ????} ??
  • }??
  • function __clear(timer){ clearTimeout(timer); clearInterval(timer); return null; }; function __attach_event(evt, callback) { if (window.addEventListener) { window.addEventListener(evt, callback, false); } else if (window.attachEvent) { window.attachEvent("on" + evt, callback); } } function __domReady(f) { // 假如 DOM 已經(jīng)加載,馬上執(zhí)行函數(shù) if (__domReady.done) return f(); // 假如我們已經(jīng)增加了一個函數(shù) if (__domReady.timer) { // 把它加入待執(zhí)行函數(shù)清單中 __domReady.ready.push(f); } else { // 為頁面加載完畢綁定一個事件, // 以防它最先完成。使用addEvent(該函數(shù)見下一章)。 __attach_event("load", __isDOMReady); // 初始化待執(zhí)行函數(shù)的數(shù)組 __domReady.ready = [f]; // 盡可能快地檢查DOM是否已可用 __domReady.timer = setInterval(__isDOMReady, 100); } } function __isDOMReady() { // 如果我們能判斷出DOM已可用,忽略 if (__domReady.done) return false; // 檢查若干函數(shù)和元素是否可用 if (document && document.getElementsByTagName && document.getElementById && document.body) { // 如果可用,我們可以停止檢查 __clear(__domReady.timer); __domReady.timer = null; // 執(zhí)行所有正等待的函數(shù) for ( var i = 0; i < __domReady.ready.length; i++ ) { __domReady.ready[i](); } // 記錄我們在此已經(jīng)完成 __domReady.ready = null; __domReady.done = true; } }

    具體的調(diào)用方法:

    Javascript代碼
  • __domReady(function()?{ ??
  • ????alert("The?dom?is?loaded!"); ??
  • });??
  • 轉載于:https://www.cnblogs.com/ie421/archive/2008/08/11/1264914.html

    總結

    以上是生活随笔為你收集整理的可以在某些场合替代onload事件的domReady事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。