【avalon源码】

1.

document.getElementsByTagName('head')[0]
document.head

2.

3.

var IEVersion = NaN
if (window.VBArray) {
    IEVersion = document.documentMode || (window.XMLHttpRequest ? 7 : 6)
}

4.

function returnRandom() {
    return new Date() - 0
}

5.

for (var i = 0, n = array.length; i < n; i++) { // n
}

6.

var rword = /[^, ]+/g // ^排除
' m, f'.match(rword) // ["m", "f"]
var class2type = {}
"Boolean Number String Function Array Date RegExp Object Error".replace(rword, function (name) {
    class2type["[object " + name + "]"] = name.toLowerCase()
})
class2type

7.

avalon.each({
    scrollLeft: "pageXOffset",
    scrollTop: "pageYOffset"
}, function (method, prop) {
    avalon.fn[method] = function (val) {
        var node = this[0] || {},
                win = getWindow(node),
                top = method === "scrollTop"
        if (!arguments.length) {
            return win ? win[prop] : node[method]
        } else {
            if (win) { // scrollTo(xpos,ypos)
                win.scrollTo(!top ? val : win[prop], top ? val : win[prop])
            } else {
                node[method] = val
            }
        }
    }
})

 8.

var eventHooks = {
    "mouseenter": {
        type: "mouseover",
        fix: function(elem, fn) {
            return function (e) {
                var t = e.relatedTarget
                if (!t || (t !== elem && !(elem.compareDocumentPosition(t) & 16))) {
                    delete e.type
                    e.type = "mouseenter"
                    return fn.call(elem, e)
                }
            }
        }
    }
}

function bind(el, type, fn, phase) {
    var hooks = eventHooks
    var hook = hooks[type]
    if (typeof hook === "object") {
        type = hook.type || type
        phase = hook.phase || !!phase
        fn = hook.fix ? hook.fix(el, fn) : fn
    }
    el.addEventListener(type, fn, phase)
    return fn
}


bind(document.querySelector('#box'), 'click', function(e) {
    console.log(this)
    console.log(e)
})

bind(document.querySelector('#box'), 'mouseenter', function(e) {
    console.log(this)
    console.log(e)
})

9.

if (DOC.onmousewheel === void 0) {
    /* IE6-11 chrome mousewheel wheelDetla 下 -120 上 120
     firefox DOMMouseScroll detail 下3 上-3
     firefox wheel detlaY 下3 上-3
     IE9-11 wheel deltaY 下40 上-40
     chrome wheel deltaY 下100 上-100 */
    eventHooks.mousewheel = {
        type: "wheel",
        fix: function (elem, fn) {
            return function (e) {
                e.wheelDeltaY = e.wheelDelta = e.deltaY > 0 ? -120 : 120
                e.wheelDeltaX = 0
                Object.defineProperty(e, "type", {
                    value: "mousewheel"
                })
                fn.call(elem, e)
            }
        }
    }
}

10.

 

11.

12.

while (fn = readyList.shift()) {
    fn(avalon)
}
原文地址:https://www.cnblogs.com/jzm17173/p/5969456.html