浅谈jQuery事件绑定原理

2020-05-22 17:11:35易采站长站整理

    },
    props: “altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which”.split(” “),       
    fix : function(event){
        //new setEvent会给event给以个expando属性 如果有中个属性 说明已经生成了event了 不需要在次对event进行包装
        if ( event[expando] )
            return event;
        //保留一个原始的event
        // new一个新的event 这个与原始的event是不同的
        var originalEvent = event;
        event = new setEvent( originalEvent );
        //获得原始event的属性值  有哪些属性值 见 this.props
        for ( var i = this.props.length, prop; i; ){
            prop = this.props[ –i ];
            event[ prop ] = originalEvent[ prop ];
        }
        //将目标元素同一成event.target
        if ( !event.target )
            event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
        //如果发现是文本节点 取他的父节点
        if ( event.target.nodeType == 3 )
            event.target = event.target.parentNode;
       
        if ( !event.relatedTarget && event.fromElement )
            event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;                           
        return event;
    }       
}
win.setEvent = function(src){
    // Allow instantiation without the ‘new’ keyword
    // Event object
    if( src && src.type ){