美文网首页
文档的DOMContentLoaded与load的区别

文档的DOMContentLoaded与load的区别

作者: 月下吴刚_c8c7 | 来源:发表于2018-11-06 18:29 被阅读0次

    DOMContentLoaded

    触发不需要等待图片等其他资源加载完成,jQuery 中经常使用的 $(document).ready(function() { // ...代码... }); 其实监听的就是 DOMContentLoaded 事件,就是页面被解析后,我们就可以访问整个页面的所有dom元素,可以缩短页面的可交互时间,提高整个页面的体验.不同的浏览器对其支持不同,需要做兼容处理.浏览器解析完文档便能触发 DOMContentLoaded 事件
    1)支持DOMContentLoaded事件的,就使用DOMContentLoaded事件;

    2)IE6、IE7不支持DOMContentLoaded,但它支持onreadystatechange事件,该事件的目的是提供与文档或元素的加载状态有关的信息。

    1. 更低的ie还有个特有的方法doScroll, 通过间隔调用:document.documentElement.doScroll("left");

    可以检测DOM是否加载完成。 当页面未加载完成时,该方法会报错,直到doScroll不再报错时,就代表DOM加载完成了。该方法更接近DOMContentLoaded的实现。
    将js放在后面,以减少First Paint的时间,但是不会减少DOMContentLoaded被触发的时间。

    function ready(fn){
    
        if(document.addEventListener) {
            document.addEventListener('DOMContentLoaded', function() {
                document.removeEventListener('DOMContentLoaded',arguments.callee, false);
                fn();
            }, false);
        } 
    
        // 如果IE
        else if(document.attachEvent) {
            // 确保当页面是在iframe中加载时,事件依旧会被安全触发
            document.attachEvent('onreadystatechange', function() {
                if(document.readyState == 'complete') {
                    document.detachEvent('onreadystatechange', arguments.callee);
                    fn();
                }
            });
    
            // 如果是IE且页面不在iframe中时,轮询调用doScroll 方法检测DOM是否加载完毕
            if(document.documentElement.doScroll && typeof window.frameElement === "undefined") {
                try{
                    document.documentElement.doScroll('left');
                }
                catch(error){
                    return setTimeout(arguments.callee, 20);
                };
                fn();
            }
        }
    };
    

    load

    页面上所有的资源(图片,音频,视频等)被加载以后才会触发load事件,简单来说,页面的load事件会在DOMContentLoaded被触发之后才触发。$(document).load(function() { // ...代码... }); 监听的是 load 事件。所有的浏览器都支持

    相关文章

      网友评论

          本文标题:文档的DOMContentLoaded与load的区别

          本文链接:https://www.haomeiwen.com/subject/hetpxqtx.html