Events适配器

var fix = function(event) {

    var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget "
		+"data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY "
		+"prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement"
		+" view wheelDelta which".split(" ");

    // 存储原始事件对象的副本
    // 和“clone”,设置只读属性
    var originalEvent = event;
    event = {
        originalEvent: originalEvent
    };
    for (var i = props.length, prop; i;) {
        prop = props[--i];
        event[prop] = originalEvent[prop];
    }

   //添加的preventDefault 取消事件的默认动作。和stopPropagation,停止事件的传播 因为它们不会在工作 在 克隆 的event
  event.preventDefault = function() {
      if (this.originalEvent.preventDefault)
           this.originalEvent.preventDefault();
      this.originalEvent.returnValue = false;
  };
  event.stopPropagation = function() {
      if (this.originalEvent.stopPropagation)
          this.originalEvent.stopPropagation();
      //原始事件的cancelBubble属性设置为true(IE)
       this.originalEvent.cancelBubble = true;
  };


  event.timeStamp = event.timeStamp || +new Date


    // 如果有必要,修复target属性,
    if (!event.target) {
        event.target = event.srcElement || document;
    }
    // 检查target是否为 textnode 节点(safari)
    if (event.target.nodeType === 3) {
        event.target = event.target.parentNode;
    }
    // relatedTarget 返回指针刚刚离开的元素(不支持 IE)。fromElement 支持 IE
    if (!event.relatedTarget && event.fromElement) {
        event.relatedTarget = event.fromElement === event.target ? event.toElement: event.fromElement;
    }

    // 计算pageX/ y, 如果没有,clientX/ Y提供
    if (event.pageX == null && event.clientX != null) {
        var doc = document.documentElement,
        body = document.body;

        event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
        event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
    }

    // Add which for key events
    if (event.which == null && (event.charCode != null || event.keyCode != null)) {
        event.which = event.charCode != null ? event.charCode: event.keyCode;
    }

    // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
    if (!event.metaKey && event.ctrlKey) {
        event.metaKey = event.ctrlKey;
    }

    // Add which for click: 1 === left; 2 === middle; 3 === right
    // Note: button is not normalized, so don't use it
    if (!event.which && event.button !== undefined) {
        event.which = (event.button & 1 ? 1 : (event.button & 2 ? 3 : (event.button & 4 ? 2 : 0)));
    }

    return event;
}


document.οnclick=getE;
function getE(e){
 e=fix(e);   alert(e.pageX);
}

//IE
document.οnclick= function (){
 e=fix(event);   alert(e.pageX);
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值