JS教程:addDOMLoadEvent事件

go痴心恋人

go痴心恋人

2016-02-20 00:59

下面是个简单易学的JS教程:addDOMLoadEvent事件教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

由于 windowonload 事件需要在页面所有内容(包括图片等)加载完后,才执行,但往往我们更希望在 DOM 一加载完就执行脚本。其实在现在大部分主流浏览器上(Firefox 3+,Opera 9+,Safari 3+,Chrome 2+)都提供了这一事件方法:

documentaddEventListener init 

那对于 IE 我们如何模拟 addDOMLoadEvent 事件呢?

Matthias Miller 最早提供了如下的解决方案:



/*@if (@_win32)
document.write("script id=__ie_onload defer src=javascript:void(0)/script");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
    if (this.readyState == "complete") {
        init(); // call the onload handler
    }
};
/*@end @*/

而 在其后提供了一种利用 doScroll 方法来模拟 addDOMLoadEvent 事件的方案,且现在主流的 JavaScript 框架(JQuery、YUI等)基本都采用的这一解决方案。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

原理基本如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

当 ondocumentready 事件触发,文档( document )已经完全解析和建立。如果组件需要操作最初的文档结构,初始化代码需被安置在这之后。ondocumentready 事件告知组件,整个页面已被加载,且在 初始文档的 onload 事件触发之前立即触发。

一些方法,例如 doScroll,要求最初的文档被完全加载。如果这些方法是初始化函数的一部分,当ondocumentready 事件触发,他们将被执行。

/*
 *
 * IEContentLoaded.js
 *
 * Author: Diego Perini (diego.perini at gmail.com) NWBOX S.r.l.
 * Summary: DOMContentLoaded emulation for IE browsers
 * Updated: 05/10/2007
 * License: GPL/CC
 * Version: TBD
 *
 */



w fn
    d wdocument
   
    init
       
           
            fn
       
   
   
   
       
           
            ddocumentElementdoScroll
        e
            setTimeoutargumentscallee
           
       
       
        init
   
   
    donreadystatechange
        dreadyState
            donreadystatechange
            init
       
   

JQuery 1.3.2 中源码实现如下:



documentdocumentElementdoScroll window windowtop
    jQueryisReady

   
       
       
        documentdocumentElementdoScroll
    error
        setTimeout argumentscallee
       
   

   
    jQueryready

YUI 2.7.0 中源码实现如下:

 EUisIE 

   
   
    YAHOOutilonDOMReady
            YAHOOutil_tryPreloadAttach
            YAHOOutil

    n documentcreateElement  

    EU_dri setInterval
       
           
            ndoScroll
            clearIntervalEU_dri
            EU_dri
            EU_ready
            n
        ex
       
    EUPOLL_INTERVAL

另外对于版本小于 Safari 3+ 的 Safari 浏览器, 也提供了一个解决方案:

 itestnavigatoruserAgent  
    _timer setInterval
        loadedcompletetestdocumentreadyState
            clearInterval_timer
            init
       
   

怿飞提示:

如果脚本是动态注入到页面上,则原生的 DOMContentReady 事件是不会被触发(即:IE 除外)。 IE 下对于在 iframe 里的使用 addDOMLoadEvent 事件,需做处理和慎用(这一点 YUI 做得不如 JQuery 细致)。


documentattachEvent
    documentreadyState
        documentdetachEvent argumentscallee
        jQueryready
   

扩展阅读:

展开更多 50%)
分享

猜你喜欢

JS教程:addDOMLoadEvent事件

Web开发
JS教程:addDOMLoadEvent事件

JS触发A标签的点击事件

Web开发
JS触发A标签的点击事件

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

JS和HTML分离:注册事件的方法进行封装

Web开发
JS和HTML分离:注册事件的方法进行封装

JS教程:学习笔记之JS类

Web开发
JS教程:学习笔记之JS类

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Dreamweaver教程:行为事件

Web开发
Dreamweaver教程:行为事件

JS教程:详细讲解JS节点知识

Web开发
JS教程:详细讲解JS节点知识

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

excel中如何设置打印相同表头

excel中如何设置打印相同表头

Powerpoint2010帮你轻松裁剪视频

Powerpoint2010帮你轻松裁剪视频
下拉加载更多内容 ↓