延迟加载

/**
 * @namespace DOM Ready
 * 兼容某些页面头部没有引用jquery
 * @function
 * @param {Function} fn
 * @example
 * DOMReady(fn)
 */
window.DOMReady = function() {
    var evt = [],
        isReady = false,
        guid = 1,
        randomKey = +new Date();
    /** @ignore 执行并销毁队列事件 */
    var fire = function() {
        if (!evt) return;
        for (var i = 0, len = evt.length; i < len; i++) {
            evt[i]();
        }
        evt = null;
    };
    /** @ignore IE DOMContentloaded */
    var doScrollCheck = function() {
        try {
            document.documentElement.doScroll('left');
            isReady = true;
        } catch(e) {
            setTimeout(doScrollCheck, 1);
            return;
        }
        isReady && fire();
    }
    var addEvent=function() {
        if (window.addEventListener) {
            return function(el, eventName, fn) {
                el.addEventListener(eventName, fn, false);
            };
        } else {
            return function(el, eventName, fn) {
                if (!fn.guid) {
                    fn.guid = randomKey + guid;
                    guid++;
                }
                el['e' + fn.guid] = fn;
                el[fn.guid] = function() {el['e' + fn.guid](window.event);};
                el.attachEvent('on' + eventName, el[fn.guid]);
            };
        }
    }();
    document.addEventListener ? addEvent(document, 'DOMContentLoaded', fire) : doScrollCheck();
    addEvent(window, 'load', fire);
    return function(fn) {
        evt ? evt.push(fn) : fn();
    };
}();
ruby前端观察
原文地址:https://www.cnblogs.com/rubyxie/p/3535551.html