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

jQuery代碼優(yōu)化之基本事件

開發(fā) 前端
jQuery對(duì)事件系統(tǒng)的抽象與優(yōu)化也是它的一大特色。本文僅從事件系統(tǒng)入手,簡(jiǎn)要分析一下jQuery為什么提供mouseenter和mouseleave事件,它們與標(biāo)準(zhǔn)的mouseover、mouseout事件有什么區(qū)別。

jQuery對(duì)事件系統(tǒng)的抽象與優(yōu)化也是它的一大特色。本文僅從事件系統(tǒng)入手,簡(jiǎn)要分析一下jQuery為什么提供mouseenter和mouseleave事件,它們與標(biāo)準(zhǔn)的mouseover、mouseout事件有什么區(qū)別。

事件模型

說到事件,就要追溯到網(wǎng)景與微軟的“瀏覽器大戰(zhàn)”了。當(dāng)時(shí),事件模型還沒有標(biāo)準(zhǔn),兩家公司的實(shí)現(xiàn)就是事實(shí)標(biāo)準(zhǔn)。網(wǎng)景在Navigator中實(shí)現(xiàn)了“事件捕獲”的事件系統(tǒng),而微軟則在IE中實(shí)現(xiàn)了一個(gè)基本上相反的事件系統(tǒng),叫做“事件冒泡”。這兩種系統(tǒng)的區(qū)別在于當(dāng)事件發(fā)生時(shí),相關(guān)元素處理(響應(yīng))事件的優(yōu)先權(quán)不同。

下面舉例說明這兩種事件機(jī)制的區(qū)別。假設(shè)文檔中有如下結(jié)構(gòu):

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

因?yàn)檫@三個(gè)元素是嵌套的,所以單擊了a,實(shí)際上也就單擊了span和div。換句話說,這三個(gè)元素都應(yīng)該有處理單擊事件的機(jī)會(huì)。在事件捕獲機(jī)制下,處理這個(gè)單擊事件的優(yōu)先次序是:div > span > a;而在事件冒泡機(jī)制下,處理這個(gè)單擊事件的優(yōu)先次序則是:a > span > div。

后來,W3C的規(guī)范要求瀏覽器同時(shí)支持捕獲和冒泡機(jī)制,并允許開發(fā)人員選擇把事件注冊(cè)到哪個(gè)階段。于是就有了下面這個(gè)注冊(cè)事件的標(biāo)準(zhǔn)方法:

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

其中:

◆ type:字符串,表示監(jiān)聽的事件類型

◆ listener:監(jiān)聽器對(duì)象(JavaScript函數(shù)),在指定事件發(fā)生時(shí)可以收到通知

◆ useCapture:布爾值,是否注冊(cè)到捕獲階段

在實(shí)際應(yīng)用開發(fā)中,為了確保與IE(因?yàn)樗恢С植东@)兼容,useCapture一般都指定為false(默認(rèn)值也是false)。換句話說,只把事件注冊(cè)到冒泡階段;對(duì)于上面那個(gè)簡(jiǎn)單的例子來說,響應(yīng)順序就是:a > span > div。

冒泡的副作用

如前所述,IE的冒泡事件模型基本上成為了事實(shí)標(biāo)準(zhǔn)。但冒泡有一個(gè)副作用。

仍以前面的文檔結(jié)構(gòu)為例,假設(shè)它是界面中的一個(gè)菜單項(xiàng),我們希望用戶鼠標(biāo)離開div時(shí)隱藏菜單。于是,我們給div注冊(cè)了一個(gè)mouseout事件。如果用戶鼠標(biāo)是從div離開的,那么一切正確。而如果用戶鼠標(biāo)是從a或span離開的,問題就來了。因?yàn)橛捎谑录芭荩瑥倪@兩個(gè)元素開始分派的mouseout事件都會(huì)傳播到div,從而導(dǎo)致鼠標(biāo)并沒有離開div,菜單就提前隱藏了。

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

優(yōu)化方案

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

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

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

結(jié)論

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

原文:http://www.ituring.com.cn/article/420

【編輯推薦】

  1. jQuery性能優(yōu)化
  2. JavaScript代碼優(yōu)化新工具UglifyJS
  3. 記一次失敗的jQuery優(yōu)化嘗試
  4. 精益求精 jQuery代碼的分析與優(yōu)化
  5. JavaScript性能優(yōu)化技巧之函數(shù)節(jié)流
責(zé)任編輯:陳貽新 來源: 圖靈社區(qū)
相關(guān)推薦

2012-04-26 13:12:09

jQuery代碼優(yōu)化

2011-11-02 17:17:06

jQuery

2011-06-14 11:14:10

性能優(yōu)化代碼

2011-01-21 10:01:07

jQueryjavascriptweb

2013-09-16 16:01:23

Android開發(fā)代碼

2015-07-21 05:55:12

2013-12-02 15:21:30

jQuery插件

2013-06-09 15:31:35

jQueryjQuery優(yōu)化性能優(yōu)化

2011-08-03 16:51:01

jQuery

2013-12-02 14:33:41

jQuery事件

2011-07-19 17:09:44

jQuery Mobi事件

2011-06-22 17:11:18

SEO

2012-01-12 14:37:34

jQuery

2010-08-04 11:15:22

Flex事件處理

2011-06-20 14:44:49

網(wǎng)站優(yōu)化

2011-06-24 16:44:43

網(wǎng)站優(yōu)化

2011-06-28 18:04:06

網(wǎng)站優(yōu)化

2021-07-29 14:20:34

網(wǎng)絡(luò)優(yōu)化移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)存儲(chǔ)

2010-03-16 11:20:53

Linux 優(yōu)化

2010-08-03 11:35:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美日本亚洲视频| 91福利视频久久久久| 欧美精品一区三区在线观看| 欧美电影三区| 日本一区二区三区视频在线观看 | 一本大道久久a久久精二百 | 亚洲精品久久久久久久久久久久 | 91在线播放网址| 一个色综合导航| 国产尤物久久久| aa在线免费观看| 欧美日韩一区二区不卡| 亚洲精品在线播放| 两个人的视频www国产精品| 久久精品国产秦先生| 黄色片在线免费看| 国产精品久久久久久久久久免费 | 粉嫩av一区二区三区四区五区| 亚洲精品一区在线观看| 成人黄色av网址| 国产日韩av网站| 亚洲国产一二三| 精品日韩一区| 精品久久久久久无码国产| 亚洲国产精品久久久| 一区中文字幕电影| 精品久久久久久久免费人妻| 欧美欧美午夜aⅴ在线观看| 欧美日韩午夜| 高清美女视频一区| 国产伦视频一区二区三区| 欧美特级www| 在线观看欧美理论a影院| 精品久久久噜噜噜噜久久图片| 在线视频欧美日韩| 国产日韩av一区二区| 一区二区三区在线免费看 | 在线不卡日本| 东热在线免费视频| 91麻豆精品国产91久久久久| 欧美a级网站| 狠狠爱免费视频| 国产亚洲人成a一在线v站| 国产精品激情电影| 精品亚洲一区二区三区四区| 欧美精品一区二区在线播放| 国产一区二区三区蝌蚪| 免费成人在线电影| 品久久久久久久久久96高清| 在线综合+亚洲+欧美中文字幕| 天天躁日日躁成人字幕aⅴ| 免费看又黄又无码的网站| 欧美大黄免费观看| 亚洲综合不卡| 日韩欧美看国产| 六月丁香婷婷在线| 91老司机精品视频| 日韩精品最新网址| 99热免费精品在线观看| 羞羞的视频在线观看| 男人天堂av片| 日韩一区二区福利| 久久成人免费电影| 国产精品一区二区中文字幕| 国产视频一区二区视频| 国产一区二区在线免费| 亚洲黄色小视频| 欧美综合一区| 国产中文在线| 青青青青草视频| 国产一区二区香蕉| 日韩av在线最新| 国产午夜一区二区三区| 欧美日韩18| 日本精品在线观看| www.视频在线.com| 高清一区二区视频| 日韩精品不卡| 国产精品爽爽爽| 久色乳综合思思在线视频| 国产69精品一区二区亚洲孕妇 | 亚洲色图在线看| 亚洲一区区二区| 免费v片在线观看| 中文字幕123| 国产日韩一区二区在线观看| 亚洲午夜在线观看| 99久久国产免费免费| 日韩**中文字幕毛片| 欧美精品在线观看| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 成人国产一区二区三区| 懂色中文一区二区三区在线视频| 日韩黄色av网站| 欧美日本一道本在线视频| 国产成人一级电影| 亚洲午夜一级| 福利片在线一区二区| 精品国产伦一区二区三区观看说明 | 自拍偷拍一区二区三区| 午夜伦欧美伦电影理论片| av一级亚洲| 国产99在线| 一区二区三区在线免费看 | 久久99国产精品免费| 极品在线视频| 国产免费拔擦拔擦8x高清在线人 | 国精一区二区| 国产精品久久久久久久免费观看| 天堂网av成人| 美女精品一区最新中文字幕一区二区三区| 亚洲欧美一级| 天堂va欧美ⅴa亚洲va一国产| 成人av综合网| 国产精品自在线拍| 亚洲精品合集| 午夜欧美视频| 成人3d动漫在线观看| 国产精品啊v在线| 免费在线观看视频一区| 懂色av一区二区三区蜜臀| 国产毛片精品视频| 欧美激情aⅴ一区二区三区| 日韩电影免费在线看| 久久爱www久久做| 91亚洲大成网污www| 国产精品白丝在线| 久久婷婷国产综合国色天香| 亚洲综合免费观看高清完整版| 欧美一级免费观看| 中文字幕欧美日韩va免费视频| 亚洲天堂av在线播放| 久久免费视频网站| 欧美日韩在线精品| 日韩欧美精品在线观看视频| 免费播放av| 日韩影片中文字幕| japanese国产精品| 久久99久久精品欧美| 国产精品护士白丝一区av| 精品成人私密视频| 夜夜嗨av一区二区三区免费区| 97婷婷大伊香蕉精品视频| 日韩精品久久久| 成人观看免费完整观看| 亚洲欧美在线网| 中文在线中文字幕| 搞黄网站在线观看| 九九热精品在线播放| 色悠久久久久综合先锋影音下载| 麻豆国产欧美一区二区三区| 欧美日韩精品一区二区三区蜜桃 | 天天综合91| 久久aⅴ国产紧身牛仔裤| 一区二区在线观看视频| 国产一区av在线| 色99中文字幕| 久久久久久国产精品免费无遮挡| 欧美日韩激情| 亚洲少妇30p| 2019中文字幕在线免费观看| 成人福利资源| 国产欧美日韩精品高清二区综合区| 波多野结衣中文字幕一区二区三区 | 女人另类性混交zo| 欧美成年网站| 99精品偷自拍| 日韩精品在线影院| 午夜精品久久久内射近拍高清| 91麻豆精品| 亚洲九九爱视频| 国产精品香蕉视屏| 成人免费观看在线观看| 97精品国产露脸对白| 日韩欧美在线网址| 九色自拍视频在线观看| 久久精品一区二区不卡| 中文字幕在线观看亚洲| 午夜国产福利在线| 亚洲综合精品久久| 日韩在线第一区| 嫩呦国产一区二区三区av| 亚洲一二三四久久| www.亚洲一区二区| 校园春色另类视频| 亚洲国产一区二区视频| 91精品视频播放| 九色在线视频| 国内久久婷婷综合| 日韩亚洲欧美中文高清在线| 韩国av电影免费观看| 中文字幕亚洲精品乱码| 日韩精品一区二区三区中文精品| 男女激情免费视频| 亚洲午夜免费| 大胆日韩av| 亚洲国产精品国自产拍av秋霞 | 久久精品72免费观看| 国产97色在线|日韩| 亚洲天堂电影|