美文网首页
dom ready 的实现

dom ready 的实现

作者: zhulichao | 来源:发表于2020-07-23 09:20 被阅读0次

    window.onload事件是等到页面上的所有资源被加载才激活,包括页面上的许多图片、音乐或falsh等资源。如果要做绑定事件、DOM操作某节点等事情,使用window.onload有点太“迟”了,比较影响用户体验。为了解决这个问题,Firefox为DOM纳入一个全新事件DOMContentLoaded,也就是后来所说的DOMReady,是在DOM树构建完毕执行,无需等待其它资源的加载,因此是在onload前加载的。

    ```
    // DOM已加载,比window.onload快,可以有多个,按序执行
    jQuery(document).ready(function() {
        ...
    });
    // 也是在页面所有元素加载完毕后执行的,但是可加载多个函数,并且可以做到js和html完全分离
    $(window).load(function() {
        ...
    });
    $(window).load(function() {
        ...
    });
    // 页面关闭时引发
    $(window).unload(function() {
        ...
    });
    
    // IE浏览器没有添加DOMContentLoaded事件,以下是jQuery对该事件的兼容性实现
    function domReady() {
        if (readyBound) return;
        readyBound = true;
        if (document.addEventListener) {// 对于非IE的处理
            document.addEventListener("DOMContentLoaded", function() {
                document.removeEventListener("DOMContentLoaded", arguments.callee, false);
                jQuery.ready();
            }, false);
        } else if (document.attachEvent) {// 对于IE的处理
            // 如果是在iframe中,通过document的onReadyStateChange实现
            document.attachEvent("onReadyStateChange", function() {
                if (document.readyState === "complete") {
                    document.detachEvent("onReadyStateChange", arguments.callee);
                    jQuery.ready();
                }
            });
            // 如果页面不在iframe中,通过setTimeout不断调用documentElement的doScroll方法直到调用成功
            if (document.documentElement.doScroll && typeof window.frameElement === "undefined") {
                (function() {
                    if (jQuery.isReady) return;
                    try {
                        document.documentElement.doScroll("left");
                    } catch(error) {
                        setTimeout(arguments.callee, 0);
                        return;
                    }
                    jQuery.ready();
                })();
            }
        }
        jQuery.event.add(window, "load", jQuery.ready);
    }
    ```
    

    相关文章

      网友评论

          本文标题:dom ready 的实现

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