亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript中mouseover、mouseout使用詳解

2019-11-20 12:01:23
字體:
來源:轉載
供稿:網友

本文并沒有像標題說的那樣,真正阻止事件元素的子元素冒泡...

只是在子元素冒泡到事件元素處時進行了一個判斷,判斷是否要觸發事件,哦...不對 應該是是否要運行事件函數中的相關操作...

首先你可以猛戳這里: 問題的出現

 注:jquery中的mouseover/out事件也有此問題

解決方法一:

在ie下有mouseenter 與 mouseleave事件來替代mouseover 和 mouseout。

網上很多說法,這兩個事件只有ie支持,其他瀏覽器不支持。

但是我在最新版本的火狐與谷歌都支持了mouseenter 與 mouseleave?。。。?!

另外ie是的支持范圍是:[ie5+ ,所以我們還是別噴ie了...

其他瀏覽器測試了下:

      在Firefox/3.6.28是不支持mouseenter 與 mouseleave的,Firefox具體從哪個版本開始支持這兩個事件,就不得而知了...

                 在Opera9.50 Alpha 與Opera9.00 Beta都不支持。其實Opera現在完全可以不要測試了,最新版的Opera都是webkit內核...

      谷歌低版本未測試...

當然這些老版本瀏覽器基本可以不用管了,所以這應該是最好的解決辦法了:用mouseenter 與 mouseleave事件來替代mouseover 和 mouseout。

此二事件的實例戳這:mouseenter與mouseleave

 注:jquery中也有mouseenter 與 mouseleave事件,兼容所有瀏覽器。

解決方法二:

上面那個方法在老版本的火狐與谷歌是不支持的,如果你希望得到最大范圍的兼容,那可以繼續往下看

我們利用var reltg = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement 來獲取事件相關元素。再通過這個事件相關元素它跟事件元素的關系(包含的關系),來判斷是否做相關事件處理。

對于mouseout事件來說,reltg就是鼠標指針離開目標時,鼠標指針進入的節點。

對于mouseover 事件來說,reltg就是鼠標指針移到目標節點上時所離開的那個節點。

在li的mouseout的事件函數中,如果reltg為li的子元素我們就不要運行相關操作,如果reltg為li的父元素就運行相關操作。

我們可以通過下面的isMouseLeaveOrEnter函數來判斷li與reltg的包含關系:

//判斷事件相關元素與li的關系 如果事件相關元素為li的子元素就返回false 反之返回truefunction isMouseLeaveOrEnter(e, handler) {   if (e.type != 'mouseout' && e.type != 'mouseover') return false;   var reltg = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement;  while (reltg && reltg != handler) reltg = reltg.parentNode;  return (reltg != handler);};Li.onmouseout = function(e) {  e = e||window.event;  if (isMouseLeaveOrEnter(e,this)) {    //運行相關操作  };}

 此方法明顯的缺點就是isMouseLeaveOrEnter中要遍歷所有的父元素了,性能問題

解決方法三:

此方法與方法二其實思路是一樣的,只是我們這里通過compareDocumentPosition/contains來判斷li與reltg的包含關系,優化了方法二遍歷所有父元素帶來的性能問題。

直接看代碼吧:

//判斷node是否為parent的子元素//if node == parent 也會返回truefunction contains(parent, node) {  if(parent.compareDocumentPosition){ //ff    var _flag = parent.compareDocumentPosition(node);     return (_flag == 20 || _flag == 0)? true : false;   }else if(parent.contains){ //ie    return parent.contains(node);  }};Li.onmouseout = function(e) {  e = e||window.event;  var relatedEle = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement  if (!contains(this, relatedEle)) {    show.innerHTML=show.innerHTML+'0';  }}

compareDocumentPosition() 方法比較兩個節點,并返回描述它們在文檔中位置的整數。

返回值可能是:

1:沒有關系,兩個節點不屬于同一個文檔。

2:第一節點(P1)位于第二個節點后(P2)。

4:第一節點(P1)定位在第二節點(P2)前。

8:第一節點(P1)位于第二節點內(P2)。

16:第二節點(P2)位于第一節點內(P1)。

32:沒有關系,或是兩個節點是同一元素的兩個屬性。

注釋:返回值可以是值的組合。例如,返回 20 意味著在 p2 在 p1 內部(16),并且 p1 在 p2 之前(4)。

而[ie8- 不支持compareDocumentPosition()方法,需要用contains代替compareDocumentPosition()方法那么強大,它是用來確定 nodeB 是否包含在另一個  nodeA 中:nodeA .contains( nodeB )

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人精品视频久久久久| 欧美黑人巨大精品一区二区| 亚洲精品电影网站| 日韩精品高清视频| 国产精品你懂得| 欧美性videos高清精品| 国产日韩在线免费| 亚洲第一av在线| 久久精品视频网站| 亚洲另类激情图| 欧美精品在线免费观看| 日本人成精品视频在线| 欧美巨乳美女视频| 日韩va亚洲va欧洲va国产| 久久久久久久影视| 亚洲色图美腿丝袜| 亚洲a级在线播放观看| 国产日韩欧美视频| 欧美性猛交xxxx乱大交极品| 色噜噜亚洲精品中文字幕| 日韩精品极品视频免费观看| 91av在线看| 精品国偷自产在线视频| 91a在线视频| 国外成人性视频| 久久久www成人免费精品| 成人中心免费视频| 国产欧美亚洲视频| 国产精品一久久香蕉国产线看观看| 亚洲图片在区色| 国产成人精品一区二区三区| 日韩美女在线观看| 亚洲肉体裸体xxxx137| 中文字幕一区日韩电影| 欧美xxxx综合视频| 2020久久国产精品| 欧美国产日韩一区二区三区| 久久久久久九九九| 91麻豆国产语对白在线观看| 欧美激情精品久久久| 伊人男人综合视频网| 亚洲三级黄色在线观看| 国产精品96久久久久久又黄又硬| 欧美精品www在线观看| 亚洲999一在线观看www| 国产精品久久中文| 不卡av电影在线观看| 91精品在线影院| 精品成人久久av| 亚洲区一区二区| 97在线视频免费| 亚洲free性xxxx护士hd| 欧美日韩在线视频一区| 国产精品亚洲激情| 欧美在线视频一区| 亚洲春色另类小说| 欧美激情精品久久久久久| 精品国产一区久久久| 成人黄色中文字幕| 亚洲国产天堂久久综合| 91理论片午午论夜理片久久| 亚洲色图日韩av| 日韩理论片久久| 在线观看欧美日韩| 国产欧美一区二区三区在线看| 国产成人拍精品视频午夜网站| 国产成人在线亚洲欧美| 国产精品成人一区二区三区吃奶| 45www国产精品网站| 中文字幕在线视频日韩| 欧美日韩精品在线视频| 亚洲精品福利在线观看| 成人a免费视频| 91麻豆桃色免费看| 日韩视频―中文字幕| 国产视频在线观看一区二区| 亚洲一区av在线播放| 亚洲欧洲国产一区| 亚洲欧美成人网| 日韩精品久久久久| 成人激情春色网| 成人h视频在线| 亚洲国产精品va在线看黑人动漫| 91性高湖久久久久久久久_久久99| 欧美一级大胆视频| 日韩在线视频国产| 北条麻妃一区二区在线观看| 亚洲毛片在线观看| 亚洲男人第一av网站| 欧美美女操人视频| 日韩欧美黄色动漫| 亚洲小视频在线| 亚洲福利小视频| 久久夜精品va视频免费观看| 国产精品一区二区在线| 91亚洲精品在线观看| 亚洲欧美成人网| 国产亚洲欧美日韩一区二区| 国产91精品久久久久| 亚洲自拍欧美另类| 岛国av午夜精品| 国产欧美精品一区二区三区介绍| 精品久久久久久久大神国产| 青青在线视频一区二区三区| 亚洲精品成人免费| 亚洲人成电影在线观看天堂色| 超碰精品一区二区三区乱码| 欧美夫妻性生活视频| 国产精品成人一区二区三区吃奶| 国产精品狠色婷| 亚洲欧美综合区自拍另类| 午夜精品福利在线观看| 91免费看国产| 欧美精品亚州精品| xxxxx成人.com| 91免费精品视频| 国产成人97精品免费看片| 最新日韩中文字幕| 亚洲人成网站色ww在线| 在线播放国产一区中文字幕剧情欧美| 热久久视久久精品18亚洲精品| 国产亚洲欧美日韩精品| 日韩精品在线免费观看| 国产视频精品在线| 欧美一区二区三区四区在线| 一个人看的www久久| 国产精品视频久| 日韩大陆毛片av| 国产精品美女免费视频| 国产精品对白刺激| 国产精品视频精品视频| 亚洲电影成人av99爱色| 国产精品高潮呻吟久久av黑人| 日本最新高清不卡中文字幕| 国内久久久精品| 草民午夜欧美限制a级福利片| 国产午夜精品麻豆| 国产视频精品va久久久久久| 日韩精品中文字幕视频在线| 国产精品久久999| 久久久久久欧美| 欧美成人精品在线| 综合欧美国产视频二区| 中文字幕亚洲综合| 69视频在线播放| 亚洲国产又黄又爽女人高潮的| 久久精品国产亚洲精品| 亚洲三级黄色在线观看| 久久久久一本一区二区青青蜜月| 日韩欧美中文字幕在线观看| 久久影院资源网| 欧洲成人午夜免费大片| 色噜噜国产精品视频一区二区| 亚洲自拍偷拍在线| 一区二区三区久久精品| 成人网中文字幕| 中文字幕欧美日韩va免费视频| 亚洲色图偷窥自拍| 91精品久久久久久久久久入口| 中文字幕视频在线免费欧美日韩综合在线看| 日韩国产一区三区| 久久九九有精品国产23| 久久免费视频在线观看| 国产成人综合精品在线|