国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

jQuery源碼分析之Event事件分析

2024-09-06 12:45:50
字體:
來源:轉載
供稿:網友

對于事件的操作無非是addEvent,fireEvent,removeEvent這三個事 件方法。一般lib都會對瀏覽器的提供的函數做一些擴展,解決兼容性內存泄漏等問題。第三個問題就是如何得到domReady的狀態。
  6.1 event的包裹

  瀏覽器的事件兼容性是一個令人頭疼的問題。IE的event在是在全局的window下, 而mozilla的event是事件源參數傳入到回調函數中。還有很多的事件處理方式也一樣。

  Jquery提供了一個 event的包裹,這個相對于其它的lib提供的有點簡單,但是足夠使用。
代碼如下:
//對事件進行包裹。
  fix : function(event) {
    if (event[expando] == true) return event;//表明事件已經包裹過
    //保存原始event,同時clone一個。
    var originalEvent = event;                ①
    event = { originalEvent : originalEvent};
    for (var i = this.props.length, prop;i;) {
       prop = this.props[--i];
      event[prop] = originalEvent[prop];
     }   
    event[expando] = true;   
    //加上preventDefault and stopPropagation,在clone不會運行
    event.preventDefault = function() {          ②
      // 在原始事件上運行
      if (originalEvent.preventDefault)
       originalEvent.preventDefault();
       originalEvent.returnValue = false;
    };
    event.stopPropagation = function() {
      // 在原始事件上運行
      if (originalEvent.stopPropagation)
        originalEvent.stopPropagation();
      originalEvent.cancelBubble = true;
    };
    // 修正 timeStamp
    event.timeStamp = event.timeStamp || now();
    // 修正target
    if (!event.target)                    ③
      event.target = event.srcElement || document;    
    if (event.target.nodeType == 3)//文本節點是父節點。
      event.target = event.target.parentNode;
    // relatedTarget
    if (!event.relatedTarget && event.fromElement)   ④
      event.relatedTarget = event.fromElement == event.target
         ? event.toElement : event.fromElement;
     // Calculate pageX/Y if missing and clientX/Y available
    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.clientLeft || 0);
      event.pageY = event.clientY
       + (doc && doc.scrollTop || body && body.scrollTop || 0)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 哈密市| 普陀区| 临漳县| 屏南县| 米易县| 阜南县| 突泉县| 普定县| 襄汾县| 武清区| 阿拉善右旗| 怀柔区| 武邑县| 贡山| 徐水县| 乌鲁木齐市| 桦南县| 大庆市| 长春市| 武威市| 浦县| 格尔木市| 新丰县| 保定市| 磐安县| 泾川县| 兰西县| 仙桃市| 荆门市| 金昌市| 石楼县| 七台河市| 绥芬河市| 德阳市| 获嘉县| 饶河县| 兰坪| 达拉特旗| 香港| 万山特区| 策勒县|