关于HTML页面DOMContentLoaded和Window.onload区别

这两个事件都是在js原生开发时经常会用到的,比如需要对页面dom进行动态处理,这时就需要用到DOMContentLoaded和window.onload事件,大家都知道,就是在dom构建完毕后,才可以对dom元素进行操作,否则会获取不到相应的dom元素,但是DOMContentLoaded和window.onload还是有很大区别的,DOMContentLoaded在dom构建完成之后就会执行,如果在页面中需要加载其他资源,比如图片、flash等,必须这些资源全部加在完毕后才会执行window.onload,所以DOMContentLoaded是在window.onload之前执行。
Jquery的$(document).ready就是利用了DOMContentLoaded来实现的,大家可以看一些相关的源码,但是DOMContentLoaded在IE9以下不支持,这里需要对IE9以下版本进行兼容处理,具体代码如下:

function domReady(fn) {
        var d = window.document;
        if(d.addEventListener) {
            d.addEventListener('DOMContentLoaded', function() {
                d.removeEventListener('DOMContentLoaded', arguments.callee, false);
                fn();
            }, false)
        } else if(d.attachEvent) {
            //http://javascript.nwbox.com/IEContentLoaded/
            var done = false,
                // only fire once
                init = function() {
                    if(!done) {
                        done = true;
                        fn();
                    }
                };
            // polling for no errors
            (function() {
                try {
                    // throws errors until after ondocumentready
                    d.documentElement.doScroll('left');
                } catch(e) {
                    setTimeout(arguments.callee, 50);
                    return;
                }
                // no errors, fire
                init();
            })();
            // trying to always fire before onload
            d.onreadystatechange = function() {
                if(d.readyState == 'complete') {
                    d.onreadystatechange = null;
                    init();
                }
            };
        }
    }

大家可以去http://javascript.nwbox.com/IEContentLoaded/这里IE官网参考。
这里还有两个问题是关于addEventListener和removeEventListener,大家有没有注意到都是需要三个参数,前两个参数大家肯定都知道,第三个参数是干什么的那?大家看一下图图片来源于网络
如果第三个参数为false,事件是在由里向外冒泡过程中触发,如果为true,事件是在由外向里,在事件捕获过程中触发。大家可以写两个嵌套div,都绑定click事件,亲测一下,这里就不写具体代码了,很简单。
在使用removeEventListener方法注销事件时需要注意,移除和绑定用的应该是同一个函数,否则不会起作用,

d.removeEventListener('DOMContentLoaded', arguments.callee, false);

以上是对DOMContentLoaded和window.onload的使用过程中的一些总结,有问题大家可以一起讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值