A-A+

javascipt中mouseout和mouseover事件冒泡介绍

2016年01月28日 web前端设计 评论 1 条 阅读 6 views 次

看到名字我们就知道mouseout和mouseover的用法,mouseout意思是移出窗口就执行mouseout的代码,而mouseover是经过是就执行mouseover中的程序。

mouseover() 方法触发 mouseover 事件,或规定当发生 mouseover 事件时运行的函数

mouseout() 方法触发 mouseout 事件,或规定当发生 mouseout 事件时运行的函数。

先看一个实例,代码如下:

  1. function showdiv()  
  2. {  
  3.  $('J_CateList').style.display='block';  
  4. }  
  5. function hidediv()  
  6. {  
  7.  $('J_CateList').style.display='none';  
  8. }  
  9. html  
  10. <div class="show-cate" id="J_ShowCate">      
  11.  <span  id="desc" onmouseover="showdiv();"></span>  
  12.         <ul class="cate-list" id="J_CateList"  onmouseout="hidediv();">  
  13.         fdafdsafsa    
  14.         </ul>  
  15. </div>  

对于mouseout和mouseover事件冒泡的处理并不能像click事件一样通过evt.stopPropagation()和evt.cancelBubble=true来阻止事件冒泡.

以下为一种解决方案,代码如下:

  1.  function isMouseLeaveOrEnter(e, handler) {  
  2.     if (e.type != 'mouseout' &amp;&amp; e.type != 'mouseover') return false;  
  3.     var reltg = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement;  
  4.     while (reltg &amp;&amp; reltg != handler)  
  5.         reltg = reltg.parentNode;  
  6.     return (reltg != handler);  
  7. }  

使用如下代码:

  1.  element.onmouseout = function(e){  
  2.     if(isMouseLeaveOrEnter(e, this)){  
  3.         ... // 操作函数  
  4.     }  
  5. }  

对函数的解释:在标准浏览器中对于mouseover和mouseout可以通过e.relatedTarget获取触发事件的元素,在IE浏览器中mouseout的事件触发元素可以e.toElement获取,mouseover的事件触发元素可以通过e.fromElement获取
判断触发事件的元素是否是当前元素的子元素,如果是则不执行事件,也就解决了mouseout和mouseover的冒泡问题.

JS阻止事件冒泡,代码如下:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5. <title>js阻止事件冒泡的DEMO</title>  
  6. <script type="text/javascript">  
  7.  //阻止冒泡的方法  
  8.  function stopPP(e)  
  9.  {  
  10.   var eevt = e || window.event;  
  11.   //IE用cancelBubble=true来阻止而FF下需要用stopPropagation方法  
  12.   evt.stopPropagation ? evt.stopPropagation() : (evt.cancelBubble=true);  
  13.  }  
  14. </script>  
  15. </head>  
  16. <body>  
  17. <div style="margin: 150px 400px;width: 700px; height: 550px; background-color: #878788;" onclick="alert('最外层div上的onclick事件');">  
  18. <h2>最外层div上的onclick事件</h2>  
  19. <div style="margin: 100px; width: 500px; height: 300px; background-color: #545444;" onclick="stopPP(arguments[0]);alert('中间层div上的onclick事件');">  
  20. <h3>中间层div上的onclick事件</h3>  
  21. <div style="margin: 60px 100px; height: 100px; width: 300px; background-color: red;" onclick="stopPP(arguments[0]);alert('最内层div上的onclick事件');">  
  22. <h4>最内层div上的onclick事件”</h4>  
  23. </div>  
  24. </div>  
  25. </div>  
  26. </body>  
  27. </html>  
标签:

1 条留言  访客:1 条  博主:0 条

  1. 钓鱼小站

    看不懂代码怎么办 😮

给我留言