麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

鼠標(biāo)經(jīng)過(guò)子元素觸發(fā)mouseout,mouseover事件的解決方案

2024-05-06 16:23:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了鼠標(biāo)經(jīng)過(guò)子元素觸發(fā)mouseout,mouseover事件的解決方案的相關(guān)資料,需要的朋友可以參考下

我想實(shí)現(xiàn)的目標(biāo):當(dāng)鼠標(biāo)進(jìn)入黑色框時(shí),橙色框執(zhí)行淡入動(dòng)畫(huà);當(dāng)黑色框范圍移動(dòng)的時(shí)候(即使經(jīng)過(guò)粉色框,動(dòng)畫(huà)仍然不被觸發(fā));當(dāng)鼠標(biāo)移出的時(shí)候,橙色方塊消失。

遇到的問(wèn)題闡述:當(dāng)鼠標(biāo)移入黑色框的時(shí)候,橙色框執(zhí)行淡入動(dòng)畫(huà),但是當(dāng)鼠標(biāo)從黑色框經(jīng)過(guò)粉色框的時(shí)候,橙色框就消失了,然后又執(zhí)行一遍淡入動(dòng)畫(huà)。當(dāng)鼠標(biāo)從粉色框移出到黑色框的時(shí)候,橙色框的淡入動(dòng)畫(huà)又被執(zhí)行。這不是我想要的。

初期代碼:

 

 
  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4. <script src="jquery.js"></script> 
  5. <meta charset="utf-8"
  6. <title>mouseover mouseout</title> 
  7. <style type="text/css" media="screen"
  8. .parent{ 
  9. width:200px; 
  10. height:200px; 
  11. background:black; 
  12. .child{ 
  13. width:100px; 
  14. height:100px; 
  15. background:pink; 
  16. .a1{ 
  17. width:40px; 
  18. height:40px; 
  19. background:orange; 
  20. display:none; 
  21. </style> 
  22. </head> 
  23. <body> 
  24. <div class="parent"
  25. <div class="child"></div> 
  26. <div class="a1"></div> 
  27. </div> 
  28. <script> 
  29. $('.parent').on('mouseover',function(e){  
  30. $('.a1').show(1000); 
  31. }); 
  32. $('.parent').on('mouseout',function(e){ 
  33. $('.a1').css('display','none'); 
  34. }); 
  35. </script> 
  36. </body> 
  37. </html> 

首先我們解釋一下原因,為什么會(huì)出現(xiàn)這些問(wèn)題。

當(dāng)鼠標(biāo)從黑色框移到粉色框的時(shí)候,此時(shí)黑色框的mouseout的被觸發(fā),又由于事件冒泡,黑色框的mouseover事件隨即被觸發(fā),所以實(shí)際上,橙色框先消失,然后立即執(zhí)行淡入動(dòng)畫(huà)。這也就是我們看到的過(guò)程。

當(dāng)鼠標(biāo)從粉色框移到黑色框的時(shí)候,此時(shí)黑色框的mouseout又被觸發(fā)(因?yàn)椴徽撌髽?biāo)穿過(guò)被選元素或其子元素,都觸發(fā) mouseover 事件),同時(shí)mouseover也被觸發(fā),所以又出現(xiàn)了再次執(zhí)行淡入效果的過(guò)程。

方法一:用mouseleave/mouseout代替mouseover/mouseout【最佳方法】

先看一下mouseout&mouseover與mouseleave&mouseenter用法上的區(qū)別

mouseover與mouseenter

不論鼠標(biāo)指針穿過(guò)被選元素或其子元素,都會(huì)觸發(fā) mouseover 事件。

只有在鼠標(biāo)指針從元素外穿入被選元素(到元素內(nèi))時(shí),才會(huì)觸發(fā) mouseenter 事件。

mouseout與mouseleave

不論鼠標(biāo)指針離開(kāi)被選元素還是任何子元素,都會(huì)觸發(fā) mouseout 事件。

只有在鼠標(biāo)指針從元素內(nèi)穿出被選元素(到元素外)時(shí),才會(huì)觸發(fā) mouseleave 事件。

可以看一個(gè)簡(jiǎn)單的例子看看二者的區(qū)別

所以改進(jìn)的代碼可以為

 

 
  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4. <script src="jquery.js"></script> 
  5. <meta charset="utf-8"
  6. <title>mouseover mouseout</title> 
  7. <style type="text/css" media="screen"
  8. .parent{ 
  9. width:200px; 
  10. height:200px; 
  11. background:black; 
  12. .child{ 
  13. width:100px; 
  14. height:100px; 
  15. background:pink; 
  16. .a1{ 
  17. width:40px; 
  18. height:40px; 
  19. background:orange; 
  20. display:none; 
  21. </style> 
  22. </head> 
  23. <body> 
  24. <div class="parent"
  25. <div class="child"></div> 
  26. <div class="a1"></div> 
  27. </div> 
  28. <script> 
  29. $('.parent').on('mouseenter',function(e){  
  30. $('.a1').show(1000); 
  31. }); 
  32. $('.parent').on('mouseleave',function(e){ 
  33. $('.a1').css('display','none'); 
  34. }); 
  35. </script> 
  36. </body> 
  37. </html> 

方法二:利用e.stopPropagation()阻止事件進(jìn)一步傳播

e.stopPropagation()會(huì)終止事件在傳播過(guò)程的捕獲、目標(biāo)處理或起泡階段進(jìn)一步傳播。調(diào)用該方法后,該節(jié)點(diǎn)上處理該事件的處理程序?qū)⒈徽{(diào)用,事件不再被分派到其他節(jié)點(diǎn)。

 

 
  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4. <script src="jquery.js"></script> 
  5. <meta charset="utf-8"
  6. <title>mouseover mouseout</title> 
  7. <style type="text/css" media="screen"
  8. .parent{ 
  9. width:200px; 
  10. height:200px; 
  11. background:black; 
  12. .child{ 
  13. width:100px; 
  14. height:100px; 
  15. background:pink; 
  16. .a1{ 
  17. width:40px; 
  18. height:40px; 
  19. background:orange; 
  20. display:none; 
  21. </style> 
  22. </head> 
  23. <body> 
  24. <div class="parent"
  25. <div class="child"></div> 
  26. <div class="a1"></div> 
  27. </div> 
  28. <script> 
  29. $('.parent').on('mouseover',function(e){ 
  30. $('.a1').show(1000); 
  31. }); 
  32. $('.parent').on('mouseout',function(e){ 
  33. $('.a1').css('display','none'); 
  34. }); 
  35. $('.child').on('mouseover',function(e){ 
  36. e.stopPropagation(); 
  37. $('.a1').css('display','block'); 
  38. //這是保證動(dòng)畫(huà)體的末狀態(tài)不變 
  39. }); 
  40. $('.child').on('mouseout',function(e){ 
  41. e.stopPropagation(); 
  42. //防止從粉色框移出到黑色框時(shí)再次觸發(fā)其他事件 
  43. }) 
  44. </script> 
  45. </body> 
  46. </html> 

拓展思考:

1.如果子元素過(guò)多怎么辦,難道每個(gè)都要去綁定e.stopPropagation()?

用jquery的一個(gè)選擇器.children(),比如$('.parent').children()。獲得匹配元素集合中每個(gè)元素的子元素。

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 福利在线小视频 | 国产精品久久久久影院老司 | 高清av免费 | 国产精品久久77777 | 欧美成人一区二区视频 | 草草视频免费观看 | 羞羞视频.www在线观看 | 一区二区三区日韩精品 | 国产一区二区视频在线播放 | 国产精品入口夜色视频大尺度 | 亚洲福利在线视频 | chinese军人gay呻吟 | 免费色片 | 日韩精品中文字幕在线播放 | 欧美午夜网 | 一级大片在线观看 | 国产精品1区2区在线观看 | 91在线视频观看 | 国产羞羞视频 | 欧美特一级 | 女人叉开腿让男人桶 | 成人在线视频在线观看 | 97香蕉超级碰碰久久免费软件 | 中文字幕在线观看日韩 | 国产二区三区在线播放 | 操操插插| 日本黄色免费观看视频 | 国产成人精品免费视频大全办公室 | 久久久久北条麻妃免费看 | 精品国产一区二区三区天美传媒 | 激情国产视频 | 精品无吗乱吗av国产爱色 | 猫咪av在线 | 日产精品一区二区三区在线观看 | 国产伊人色 | 欧美日韩综合视频 | 亚洲第一页视频 | 伊人av影院 | 天天夜碰日日摸日日澡性色av | 欧美1区2区在线观看 | 日韩欧美精品中文字幕 |