国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

jQuery基本事件代碼優化

開發 前端
由于事件冒泡,從這兩個元素開始分派的mouseout事件都會傳播到div,從而導致鼠標并沒有離開div,菜單就提前隱藏了。為了避免冒泡的副作用,jQuery提供了mouseenter和mouseleave事件,來代替mouseover和mouseout。

jQuery對事件系統的抽象與優化也是它的一大特色  。本文僅從事件系統入手,簡要分析一下jQuery為什么提供mouseenter和mouseleave事件,它們與標準的mouseover、mouseout事件有什么區別  。

事件模型

說到事件,就要追溯到網景與微軟的“瀏覽器大戰”了。當時,事件模型還沒有標準,兩家公司的實現就是事實標準。網景在Navigator中實現了“事件捕獲”的事件系統,而微軟則在IE中實現了一個基本上相反的事件系統,叫做“事件冒泡”。這兩種系統的區別在于當事件發生時,相關元素處理(響應)事件的優先權不同。

下面舉例說明這兩種事件機制的區別  。假設文檔中有如下結構:

  1. <div>   
  2.     <span>   
  3.         <a>...a>   
  4.     span>   
  5. div>   

因為這三個元素是嵌套的,所以單擊了a,實際上也就單擊了span和div  。換句話說,這三個元素都應該有處理單擊事件的機會  。在事件捕獲機制下,處理這個單擊事件的優先次序是:div > span > a;而在事件冒泡機制下,處理這個單擊事件的優先次序則是:a > span > div  。

后來,W3C的規范要求瀏覽器同時支持捕獲和冒泡機制,并允許開發人員選擇把事件注冊到哪個階段  。于是就有了下面這個注冊事件的標準方法

  1. target.addEventListener(type, listener, useCapture Optional );  

其中:

type:字符串,表示監聽的事件類型

listener:監聽器對象(JavaScript函數),在指定事件發生時可以收到通知

useCapture:布爾值,是否注冊到捕獲階段

在實際應用開發中,為了確保與IE(因為它不支持捕獲)兼容,useCapture一般都指定為false(默認值也是false)  。換句話說,只把事件注冊到冒泡階段;對于上面那個簡單的例子來說,響應順序就是:a > span > div  。

冒泡的副作用

如前所述,IE的冒泡事件模型基本上成為了事實標準。但冒泡有一個副作用。

仍以前面的文檔結構為例,假設它是界面中的一個菜單項,我們希望用戶鼠標離開div時隱藏菜單。于是,我們給div注冊了一個mouseout事件  。如果用戶鼠標是從div離開的,那么一切正確  。而如果用戶鼠標是從a或span離開的,問題就來了。因為由于事件冒泡,從這兩個元素開始分派的mouseout事件都會傳播到div,從而導致鼠標并沒有離開div,菜單就提前隱藏了。

當然,冒泡的副作用不難避免  。比如,給div內部的每個元素都注冊mouseout事件,并使用.stopPropagation()方法阻止事件進一步傳播  。對于IE,就得將事件對象的cancelBubble屬性設置為false,取消事件冒泡  。不過,這仍然回到自己處理瀏覽器不兼容性問題的老路上了  。

優化方案

為了避免冒泡的副作用,jQuery提供了mouseenter和mouseleave事件,就使用它們來代替mouseover和mouseout吧  。

下面這個摘自jQuery的內部函數withinElement,就是為mouseenter和mouseleave提供支持的  。翻譯了一下注釋,僅供大家參考  。

  1. // 下面這個函數用于檢測事件是否發生在另一個元素的內部    
  2. // 在 jQuery.event.special.mouseenter 和 mouseleave 處理程序中使用    
  3. var withinElement = function( event ) {    
  4.     // 檢測 mouse(over|out) 是否還在相同的父元素內    
  5.     var parent = event.relatedTarget;    
  6.    
  7.     // 設置正確的事件類型    
  8.     eventevent.type = event.data;    
  9.    
  10.     // Firefox 有時候會把 relatedTarget 指定一個 XUL 元素    
  11.     // 對于這種元素,無法訪問其 parentNode 屬性    
  12.     try {    
  13.    
  14.         // Chrome 也類似,雖然可以訪問 parentNode 屬性    
  15.         // 但結果卻是 null    
  16.         if ( parent && parent !== document && !parent.parentNode ) {    
  17.             return;    
  18.         }    
  19.    
  20.         // 沿 DOM 樹向上    
  21.         while ( parent && parent !== this ) {    
  22.             parentparent = parent.parentNode;    
  23.         }    
  24.    
  25.         if ( parent !== this ) {    
  26.             // 如果實際正好位于一個非子元素上面,那好,就處理事件    
  27.             jQuery.event.handle.apply( this, arguments );    
  28.         }    
  29.    
  30.     // 假定已經離開了元素,因為很可能鼠標放在了一個XUL元素上    
  31.     } catch(e) { }    
  32. },   

結論

在jQuery里,可以使用mouseenter和mouseleave事件來避免事件冒泡的副作用。

責任編輯:張偉 來源: 圖靈社區
相關推薦

2011-10-31 13:31:03

jQuery

2011-11-02 17:17:06

jQuery

2011-01-21 10:01:07

jQueryjavascriptweb

2015-07-21 05:55:12

2013-12-02 15:21:30

jQuery插件

2013-06-09 15:31:35

jQueryjQuery優化性能優化

2011-08-03 16:51:01

jQuery

2013-12-02 14:33:41

jQuery事件

2011-07-19 17:09:44

jQuery Mobi事件

2012-01-12 14:37:34

jQuery

2010-08-04 11:15:22

Flex事件處理

2010-03-16 11:20:53

Linux 優化

2010-08-03 11:35:06

2022-08-31 12:15:09

JavaScript代碼優化

2024-09-14 11:23:19

2010-03-29 10:12:04

Nginx優化設置

2009-07-03 10:34:06

JSP bean

2017-09-08 18:29:17

jQuery代碼React

2011-06-14 11:14:10

性能優化代碼

2012-05-22 09:52:03

jQuery
點贊
收藏

51CTO技術棧公眾號

国产日韩av网站| 五丁香在线视频| 亚洲五月综合| 欧美成在线视频| 黄瓜视频成人app免费| 日韩一区二区麻豆国产| 成人免费黄色网页| 91福利国产成人精品照片| 中文字幕电影在线观看| 亚洲欧美另类在线| 国产一级粉嫩xxxx| 亚洲日本在线视频观看| 美女av电影| 亚洲品质自拍视频网站| 四虎免费av| 亚洲天堂av一区| 久久国产情侣| 一区二区成人在线视频| 日本全棵写真视频在线观看| 中文字幕永久在线不卡| 最新天堂中文在线| 亚洲视频 欧洲视频| 奇米777影视成人四色| 1000精品久久久久久久久| 成人免费网站视频www| 一区二区三区欧美亚洲| 最猛黑人系列在线播放| 精品国产31久久久久久| 粉嫩av一区| 91精品国模一区二区三区| 中中文字幕av在线| 亚洲无线码在线一区观看| 国产精品亲子伦av一区二区三区| 日韩在线观看av| 红杏aⅴ成人免费视频| 清纯唯美日韩制服另类| 91精品久久久久久久久久不卡| 91九色露脸| 全部av―极品视觉盛宴亚洲| 国产精品免费看久久久无码| 国产欧美精品区一区二区三区 | 五月天丁香久久| 日韩a级作爱片一二三区免费观看| 欧美午夜视频一区二区| 精品黄色免费中文电影在线播放| 亚洲国产精品悠悠久久琪琪| 亚洲综合资源| 国产免费成人av| 亚洲欧美视频一区二区三区| 欧美 国产 精品| 国产欧美日韩另类一区| 黄页网站在线播放| 日韩视频免费直播| 99久久这里有精品| 成人av在线网址| 久久国产精品99久久久久久老狼 | 国产麻豆91精品| 熟女人妇 成熟妇女系列视频| 亚洲精品成人在线| 深夜国产在线播放| 欧美日韩电影在线观看| 欧美午夜一区| 一本大道熟女人妻中文字幕在线| 亚洲一区二区欧美| 男人久久天堂| 国产精品一区专区欧美日韩| 精品中文av资源站在线观看| 99在线欧洲视频| 亚洲成人精品在线| 亚洲精品国产动漫| 欧美性天天影院| 中文字幕在线观看一区| 色呦呦久久久| 国产精品久久久久久久久久小说| 三级不卡在线观看| 成人观看视频| 亚洲欧美中文日韩v在线观看| 国产亚洲一卡2卡3卡4卡新区 | 牛牛影视久久网| 久久青青草综合| 国产三级欧美三级日产三级99 | 岛国av在线网站| 欧美在线中文字幕| 精彩视频一区二区三区| 性疯狂做受xxxx高清视频| 日韩电影中文字幕一区| 亚洲色图国产| 国产一区二区在线免费播放| 欧美精品一区二区三区高清aⅴ| 天天操综合520| 亚洲最大免费| 欧美性猛交xxxx富婆| 婷婷视频一区二区三区| 美国av在线播放| 欧美日韩在线综合| 精品在线观看入口| 亚洲午夜精品久久久久久人妖| 3751色影院一区二区三区| 天海翼精品一区二区三区| 国产精品视频一二三四区| 欧美人xxxx| 中文字幕一区二区av| 国产二级片在线| 欧美情侣性视频| 成人性生交大合| 青春草视频在线观看| 亚洲最大成人免费视频| 亚洲女人小视频在线观看| 视频一区中文字幕精品| 伊人情人网综合| 日韩欧美国产1| 国产精品久久久久毛片大屁完整版 | 黄色录像特级片| 在线不卡免费欧美| 欧美jjzz| 青青青免费视频在线2| 57pao成人永久免费视频| 久久久噜噜噜久噜久久综合| 3d欧美精品动漫xxxx无尽| 视频一区视频二区视频三区高| 91福利国产精品| 清纯唯美日韩| 97香蕉久久| 国产精品丝袜久久久久久高清| 中文字幕一区二| 任你弄精品视频免费观看| 国产第一页视频| 不卡av电影在线观看| 久久亚洲综合色| 成人性生交大片免费看96| 鲁一鲁一鲁一鲁一av| 91精品国产高清自在线| 综合自拍亚洲综合图不卡区| 自拍视频一区| 激情视频免费观看在线| 成人美女免费网站视频| 色香蕉久久蜜桃| 99精品久久久| 香蕉成人app免费看片| 在线观看一区二区三区三州| 日韩成人高清在线| 成人精品在线视频观看| 亚洲精品一区av| 欧美婷婷精品激情| 日本一区二区三区在线播放 | 香艳视频网站| 日韩免费观看网站| 亚洲成人一区二区在线观看| 一区二区在线影院| av在线播放国产| 欧美精品久久96人妻无码| 日韩亚洲精品视频| 亚洲欧美偷拍卡通变态| 欧美日韩第一| 久久亚洲天堂| www精品久久| 日本精品va在线观看| 色综合久久久网| 人人精品人人爱| 精品国产第一国产综合精品| 国产三级香港三韩国三级| 91成人免费看| 亚洲精品一区av在线播放| 久久久另类综合| 国产精品国产一区| xxxx视频在线| 无遮挡又爽又刺激的视频 | 一区二区三区四区欧美| 中文字幕免费精品一区| 国产精品电影一区二区三区| 天天做天天爱天天综合网| av福利精品| 久久手机在线视频| 欧美一区二区.| 欧美日本一区二区在线观看| 成人午夜av电影| 欧美aaaaaaaaaaaa| 天堂在线中文网官网| www.国产精| 免费国产一区| 欧美精品一区二区免费| 欧美专区日韩专区| 国产成人精品三级| 99精品小视频| 久久天天久久| youjizz在线播放| 免费观看精品视频| 国产精品大全| 国产亚洲在线播放| 欧美性猛交xxxx免费看久久久| 日本aⅴ亚洲精品中文乱码| 欧美日韩一区二区三区四区不卡 | 中文在线免费一区三区| 在线日本中文字幕| 男人女人黄一级| 欧美18视频| 日本道色综合久久影院| 亚洲精品mp4| 色婷婷亚洲婷婷| 欧美激情一区二区三区四区|