`

js onmouseout 与onmouseleave的区别(转载)

阅读更多

在IE下解决问题很简单,用onMouseEnter、onMouseLeave来代 替onMouseOver、onMouseOut就行了,他们的作用基本相同,前者不会发生冒泡。但是firefox下没有这两个事件,如果用 jQuery的event事件,只要bind mouseleave和mouseenter即可。如果是纯js实现,只能这么做:

通过判断触发onMouseOut事件后鼠标到达的元素是不是包含在父元素(信息栏Div)内,如果是就表示鼠标还在信息栏上,则不隐藏,如果否就表示鼠标真的移出了信息栏,那么信息栏隐藏,思路有了,那么就一步步来解决问题

首先来获取触发onMouseOut事件的元素,IE下event的属性toElement来获得,在firefox下变成了relatedTarget(很是折腾!)
IE:event.toElement    Firefox:event.relatedTarget(注意Firefox下event须要调用函数时传入)

接下来就是判断获取的元素是否是子元素,IE下通过元素的contains(Element)方法可以判断,同样的firefox下没有这个方法!!,不过可以给firefox下的元素定义contains()方法来解决问题,代码如下:

if(typeof(HTMLElement)!="undefined")    //给firefox定义contains()方法,ie下不起作用
{   
      HTMLElement.prototype.contains=function(obj)   
      {   
          while(obj!=null&&typeof(obj.tagName)!="undefind"){ //通过循环对比来判断是不是obj的父元素
       if(obj==this) return true;   
       obj=obj.parentNode;
     }   
          return false;   
      };   
}  

获取和判断搞定后,我们就可以通过判断IE和Firefox来针对处理了,通过navigator.userAgent来判断浏览器:
   if(navigator.userAgent.indexOf("MSIE")>0) { 
        return "MSIE"; 
   } 
   if(navigator.userAgent.indexOf("Firefox")>0){ 
        return "Firefox"; 
   }
 

到此为止所有要解决的问题都得到了解决,当触发onMouseOut事件时我们针对不同的浏览器先获取鼠标到达的元素,然后通过判断该元素是否在信息栏(div)内,如果元素是子元素,那么不执行onMouseOut事件,反之则执行事件,隐藏信息栏,完成后的代码如下:
function hideMsgBox(theEvent){ //theEvent用来传入事件,Firefox的方式
        if (theEvent){
               var browser=navigator.userAgent;   //取得浏览器属性
               if (browser.indexOf("Firefox")>0){ //如果是Firefox
                    if (document.getElementById('MsgBox').contains(theEvent.relatedTarget)) { //如果是子元素
                        return;   //结束函式
                        } 
                } 
                  if (browser.indexOf("MSIE")>0){ //如果是IE
                          if (document.getElementById('MsgBox').contains(event.toElement)) { //如果是子元素
                                return; //结束函式
                           }
                 }
             }
            /*要执行的操作*/
}

在信息栏(Div)上设置onMouseOut=hideMsgBox(event)来调用,解决冒泡问题。
通过设置
window.event.cancelBubble = true (IE) event.stopPropagation() event.preventDefault() 
(Firefox)
也可以解决问题,但是需要遍历所有子元素,影响效率,所以还是在触发onMouseOut事件时再进行上述判断分别处理比较合适。

分享到:
评论

相关推荐

    javascript onmouseout 解决办法.docx

    ### JavaScript `onmouseout` 解决方案详解 #### 引言 在前端开发中,我们经常需要处理用户与页面元素之间的交互行为。其中一种常见的需求是当用户的鼠标移出某个元素时,执行特定的操作,比如隐藏一个提示框或者...

    javascript onmouseout 解决办法

    在JavaScript中,`onmouseout`事件用于在鼠标指针移出指定的元素时触发一个函数。这个事件在实现诸如鼠标悬停显示层、移出隐藏层等功能时非常有用。然而,由于`onmouseout`触发条件较为敏感,很容易在经过元素内的子...

    js下关于onmouseout、事件冒泡的问题经验小结.docx

    ### JavaScript 下关于 `onmouseout` 与事件冒泡的问题经验小结 #### 一、引言 在前端开发过程中,事件处理是不可或缺的一部分。其中,`onmouseout` 事件和事件冒泡机制尤为关键,它们涉及到用户交互以及页面元素...

    chrome浏览器不支持onmouseleave事件的解决技巧

    `onmouseleave` 事件与 `onmouseout` 事件类似,但存在关键的区别。`onmouseout` 在鼠标离开元素或其任何子元素时触发,而 `onmouseleave` 只在鼠标离开元素自身时触发,不包括子元素。在某些情况下,`onmouseleave`...

    js 阻止子元素响应父元素的onmouseout事件具体实现

    这段代码的核心在于,通过判断子元素与当前鼠标位置的关系来决定是否响应父元素的onmouseout事件。这种方式可以有效避免当鼠标从子元素移出到父元素时,由于父元素覆盖范围更广而导致的不必要的响应。 需要注意的是...

    onmouseover和onmouseout的一些问题思考

    通过以上代码,我们可以模拟出与`onmouseenter`和`onmouseleave`类似的行为,确保事件只在真正进入或离开元素时触发,而不会受到子元素的影响。这种方法利用了W3C标准的`relatedTarget`属性和IE的`fromElement`和`...

    onmouseover事件和onmouseout事件全面理解

    在JavaScript中,`onmouseover`和`onmouseout`事件是两个非常常见的用于处理用户交互的事件。它们主要用于响应用户将鼠标指针移到元素上方或移出元素时的行为。这两个事件在网页动态效果和用户界面交互设计中扮演着...

    js下关于onmouseout、事件冒泡的问题经验小结

    问题是这样的:一个div元素要触发onmouseout事件,同时这个div内部还有子元素,于是当鼠标移动到该div的子元素上时,onmouseout事件也被触发了。在要做浮动层效果的时候会经常遇到这个问题。 解决方法一: 使用...

    js特效大全 JavaScript 特效 js特效

    JavaScript,简称JS,是网页开发中的重要脚本语言,用于实现客户端的动态效果和交互。在本"js特效大全"中,我们将会探讨多种JavaScript特效的实现,包括显示特效、鼠标事件、窗口响应以及CSS操作等方面的知识点。...

    javascript\JS使用大全收藏

    JavaScript(简称JS)是一种轻量级的解释性编程语言,广泛用于网页和网络应用开发。在这个JS使用大全收藏中,涵盖了超过230个常用功能,包括各种交互效果、事件处理、DOM操作以及样式控制等。下面将对部分关键知识点...

    JavaScript一些技巧(转载)

    根据给定的文件信息,以下是对“JavaScript一些技巧”中涉及的关键知识点的详细解析: ### 1. 事件处理:`onBlur`, `onFocus`, `onChange`, `onSelect` 在网页开发中,事件处理是与用户交互的核心部分。`onBlur`...

    JavaScript Cheat Sheet - JS小抄-快速查看

    JavaScript Cheat Sheet是一份由Dave Child编写的速查手册,旨在帮助开发者快速查找和回顾JavaScript中的关键信息。这份手册内容丰富,包含了正则表达式的语法和模式修饰符、JavaScript数组方法、字符串和日期对象的...

    js使用onmousemove和onmouseout获取鼠标坐标的方法

    本文实例讲述了js使用onmousemove和onmouseout获取鼠标坐标的方法。分享给大家供大家参考。具体如下: 下面的js代码演示了onmousemove和onmouseout事件的用法,鼠标在指定区域内移动时会动态显示鼠标坐标信息 <!...

    javascript中onmouse事件在div中失效问题的解决方法

    在IE下解决问题很简单,用onMouseEnter、onMouseLeave来代替onMouseOver、onMouseOut就行了,他们的作用基本相同,但前者不会发生冒泡(如果用 jQuery的event事件,只要绑定mouseleave、mouseenter即可)。...

    javascript入门和基础知识

    ### JavaScript入门和基础知识 #### 为什么学习JavaScript? 1. **前端技术的重要组成部分**:JavaScript能够对页面内容进行实时验证,减少不必要的服务器请求,降低服务器负担。 2. **增强用户体验**:利用...

    图片onmouseover 和onmouseout 事件,根据图片不同大小显示不同大小的div,鼠标移上去显示该图片详细信息

    在网页设计中,`onmouseover` 和 `onmouseout` 是两个非常重要的JavaScript事件,它们用于实现用户交互功能,特别是创建动态效果和提供额外信息。在这个特定的案例中,这两个事件被用来控制一个div元素,使其根据...

    兼容ie和firefox的鼠标经过(onmouseover和onmouseout)实现--简短版

    在本篇文章中,我们将探讨如何使用CSS和JavaScript来实现兼容IE和Firefox的鼠标经过效果(onmouseover和onmouseout)。在前端开发中,鼠标经过效果是一个非常常用的交互效果,然而不同的浏览器对其支持的方式不同,...

Global site tag (gtag.js) - Google Analytics