JS教程:addDOMLoadEvent事件

2016-02-20 00:59 27 1 收藏

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

【 tulaoshi.com - Web开发 】

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

documentaddEventListener init 

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

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

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


/*@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等)基本都采用的这一解决方案。

原理基本如下:

当 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 浏览器, 也提供了一个解决方案:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)
 itestnavigatoruserAgent  
    _timer setInterval
        loadedcompletetestdocumentreadyState
            clearInterval_timer
            init
       
   

怿飞提示:

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


documentattachEvent
    documentreadyState
        documentdetachEvent argumentscallee
        jQueryready
   

扩展阅读:

来源:https://www.tulaoshi.com/n/20160220/1632997.html

延伸阅读
标签: Web开发
lightbox源码解析 function getPageScroll(){ var yScroll; if (self.pageYOffset) { yScroll = self.pageYOffset; //NS } else if (document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict yScroll = document.documentElement.scrollTop; } else if (document.body) {// all other Explorer...
标签: Web开发
数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象 Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能 1.1 定义数组 声明有10个元素的数组 var a = new Array(10); 此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] ...
WML教程7:WML的事件 WML 的事件 内部事件(Onevent) 相关属性: type:内部事件的触发条件,当前浏览器状态满足触发条件时,浏览器就会触发这个条件下设置的Task,内部事件总共有4种触发条件。 1 ontimer 满足时钟设置的条件时,该条件成立。关于时钟设置问题,后面还有专门的说明。 2 onenterbackward 通过Prev或其他外部命令返回...
标签: Web开发
作用域(scope)是JavaScript语言的基石之一,在构建复杂程序时也可能是最令我头痛的东西。记不清多少次在函数之间传递控制后忘记关键字引用的究竟是哪个对象,甚至,我经常以各种不同的混乱方式来曲线救国,试图伪装成正常的代码,以我自己的理解方式来找到所需要访问的变量。 这篇文章将正面解决这个问题:简述上下文(context)和作用域...
标签: Web开发
9.3  在线小测试程序 在本章中,我们将对在线小测试程序作两处修改。一是允许用户首先选择回答完问题所需要的时间,二是允许用户选择要回答多少个问题。 要把在线小测试程序转换为一个基于计时器的程序,只需修改两个页面,即QuizPage.htm页面和GlobalFunctions.htm页面。 首先,需要修改的是QuizPage.htm页面中小测试程序的开始表单...

经验教程

176

收藏

42
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部