`
xiaoych
  • 浏览: 145294 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多
    load事件可以安全的执行JS,因为该事件是在页面完全加载完后才开始执行(包括页面内的图片、flash等所有元素),不会因为JS需要对某个DOM操作,而页面还没有加载该节点而引起错误。但是这种安全是需要付出代价的:如果某些图片(或者一些别的东西)加载特别慢,那么load事件会等到很久之后才会触发。

    针对这个问题,一些JS框架提供了一些补充方法。如:jquery的$(document).ready()、mootools的domready事件。都是在页面的DOM加载完毕后立即执行,而不需要等待漫长的图片下载过程。

    如果不使用这些框架,怎样实现自己的 document ready呢?请看以下一段代码:

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 已经加载,马上执行函数
    if (__domReady.done) return f();
    // 假如我们已经增加了一个函数
    if (__domReady.timer) {
        // 把它加入待执行函数清单中
        __domReady.ready.push(f);
    } else {
        // 为页面加载完毕绑定一个事件,
        // 以防它最先完成。使用addEvent(该函数见下一章)。
        __attach_event("load", __isDOMReady);
        // 初始化待执行函数的数组
        __domReady.ready = [f];
        // 尽可能快地检查DOM是否已可用
        __domReady.timer = setInterval(__isDOMReady, 100);
    }
}
function __isDOMReady() {
    // 如果我们能判断出DOM已可用,忽略
    if (__domReady.done) return false;
    // 检查若干函数和元素是否可用
    if (document && document.getElementsByTagName && document.getElementById && document.body) {
        // 如果可用,我们可以停止检查
        __clear(__domReady.timer);
        __domReady.timer = null;
        // 执行所有正等待的函数
        for ( var i = 0; i < __domReady.ready.length; i++ ) {
            __domReady.ready[i]();
        }
        // 记录我们在此已经完成
        __domReady.ready = null;
        __domReady.done = true;
    }
}



具体的调用方法:

__domReady(function() {
    alert("The dom is loaded!");
});
分享到:
评论
2 楼 blacklong 2012-08-23  
good,找了好几个,就你这个好使~~~
1 楼 esteem 2008-08-22  
呵呵 这个东西好 谢谢 解决了我个问题

相关推荐

    javaScript的onload事件例子

    javaScript的onload事件的代码,javaScript内嵌在html中。

    脱离document.onload和window.onload的onload事件

    脱离document.onload和window.onload的onload事件,可多次添加加载事件!

    js的image onload事件使用遇到的问题

    主要介绍了js的image onload事件使用遇到的问题,需要的朋友可以参考下

    微信小程序onLaunch异步,首页onLoad先执行?

    本来按照事件顺序,小程序初始化时触发App里的onLaunch,后面再执行页面Page里的onLoad,但是在onLaunch里请求获取是否有权限,等待返回值的时候Page里的onLoad事件就已经执行了。   //app.js App({ onLaunch: ...

    ie 处理 gif动画 的onload 事件的一个 bug

    IE浏览器在处理GIF动画的onload...该bug是IE浏览器在处理GIF动画的onload事件时存在的一个bug,可以通过在onload事件函数中,将onload事件设置为null来解决。同时,静态GIF、JPG、BMP等其他格式的图片不会出现这个bug。

    js的onload事件及初始化按钮事件示例代码

    onload事件当一个页面或是一张图片加载完成时被触发,在body上不仅可以用onload,而且还支持多个HTML标签.用法如下

    img的onload的另类用法

    例如,我们可以使用onload事件来显示图片的加载进度,或者在图片加载完成时执行某些操作。 然而,onload事件不仅仅局限于图片的加载完成,还有许多其他的用法。例如,在AJAX开发中,我们可以使用onload事件来加载...

    把多个JavaScript函数绑定到onload事件处理函数上的方法

    为了让函数只在页面加载完毕后才得到执行,我们会把函数绑定到onload事件上: [removed] = userFunction 但如果有两个函数:firstFunction() 和 secondFunction(),都想让它们在页面加载完毕后得到执行,该怎么办?...

    原生javascript如何实现共享onload事件

    在工作时,我们给一个元素绑定了事件,如果dom还没...有一种办法可以让我们避开这一难题:可以先创建一个匿名函数来容纳这两个函数,然后把那个匿名函数绑定到onload事件上,如下所示: [removed] = function(){ fi

    图片onload事件触发问题解决方法

    并且随页面大小的不同情况... 解决办法是再onload触发前改变图片src的值,也就是相当于图片开始时有个临时的占位图片,页面载入过程中用js换成实际需要的src,只要每次onload事件触发前src发生变化,则onload表现正常。

    仅img元素创建后不添加到文档中会执行onload事件的解决方法

    仅img元素创建后却不添加到文档中会执行onload事件&lt;/title&gt; &lt;/HEAD&gt; &lt;BODY&gt; [removed] var img = document.createElement(‘img’); img.src = ...

    《javascript》——event对象与事件

    * onload 事件的使用:onload 事件是最重要的事件之一,它可以在页面加载完成时执行某些任务。 * onmouseover 和 onmouseout 事件的使用:这两个事件通常都是配合着使用,表示对一个对象的状态改变的两种最常见情形...

    js onload事件不起作用示例分析

    前一段事件遇到一个奇怪的问题,jsp页面中写一个onload事件,发现居然不起作用,查看源文件,bady的onload后居然没有方法名??? &lt;body onload=”这里居然是空的” bottommargin=”0″ leftmargin=”0″ ...

    img onload事件绑定各浏览器均可执行

    在需要对img进行onload事件绑定的时候,一般大家都会想到用常规的方法进行事件绑定此时大家会发现alert&#40;1&#41;并没有执行,这是什么原因呢?特别是在ie和ff浏览器下这是为什么呢,本文将详细为您解答

    IE中图片的onload事件无效问题和解决方法

    主要介绍了IE中图片的onload事件无效问题和解决方法,这是一个很经典的问题,其实只需要调换一下代码顺序即可解决,需要的朋友可以参考下

    jquery.imgGetSize:在图片onload之前获取图片的大小

    image-size使用该插件,可以在图片onload之前获取图片的大小,在瀑布流布局中,应该可能会有用处。###实现原理:使用轮询,在图片onload之前,获取到图片大小。如果图片已经被缓存过,直接返回相关信息。回调参数...

Global site tag (gtag.js) - Google Analytics