onmouseover和onmouseout的一些问题思考

 更新时间:2013年08月14日 09:26:43   作者:  
这两个事件的触发表现真的就是你想要的吗?在IE下确实有你需要的两个这样事件:onmouseenter 和 onmouseleave。但很不幸FF等其他浏览器并不支持
一个DIV层,当鼠标移进的时候会触发onmouseover,移出的时候会触发onmouseout。
 
很简单的逻辑,这也是我们想要的!但随之烦恼也就来了:onmouseover并不会只在移进时才触发,onmouseout也不会只在移出时才触发!鼠标在DIV里面移动时也会可能触发onmouseover或onmouseout。
 
在上图中,对于'A'来说:当鼠标进入'A'(路径'1′)时那么就会触发'A'的onmouseover事件;接着鼠标移动到'B'(路径'2′),此时'A'会触发onmouseout(先)和onmouseover(后)事件。

由此可见,如果HTML元素(‘A'层)内还有其他元素(‘B','C'层),当我们移动到这些内部的元素时就会触发最外层(‘A'层)的onmouseout和onmouseover事件。

这两个事件的触发表现真的就是你想要的吗?也许你需要一个只在移进时才触发的,一个只在移出时才触发的事件,不管其内部是否还有其他元素….

解决方案

在IE下确实有你需要的两个这样事件:onmouseenter 和 onmouseleave。但很不幸FF等其他浏览器并不支持,只好模拟实现:
复制代码 代码如下:

document.getElementById('...').onmouseover = function(e){
if( !e ) e = window.event;
var reltg = e.relatedTarget ? e.relatedTarget : e.fromElement;
while( reltg && reltg != this ) reltg = reltg.parentNode;
if( reltg != this ){
// 这里可以编写 onmouseenter 事件的处理代码
}
}
document.getElementById('...').onmouseout = function(e){
if( !e ) e = window.event;
var reltg = e.relatedTarget ? e.relatedTarget : e.toElement;
while( reltg && reltg != this ) reltg = reltg.parentNode;
if( reltg != this ){
// 这里可以编写 onmouseleave 事件的处理代码
}
}

备注:

W3C在mouseover和mouseout事件中添加了relatedTarget属性

•在mouseover事件中,它表示鼠标来自哪个元素
•在mouseout事件中,它指向鼠标去往的那个元素
而Microsoft在mouseover和mouseout事件中添加了两个属性

•fromElement,在mouseover事件中表示鼠标来自哪个元素
•toElement,在mouseout事件中指向鼠标去往的那个元素

相关文章

  • JavaScript运行时库属性一览表

    JavaScript运行时库属性一览表

    这篇文章主要介绍了JavaScript运行时库属性,需要的朋友可以参考下
    2014-03-03
  • JavaScript入门教程(6) Window窗口对象

    JavaScript入门教程(6) Window窗口对象

    他是JavaScript中最大的对象,它描述的是一个浏览器窗口。一般要引用它的属性和方法时,不需要用“window.xxx”这种形式,而直接使用“xxx”。一个框架页面也是一个窗口。
    2009-01-01
  • 探寻JavaScript中this指针指向

    探寻JavaScript中this指针指向

    JavaScript由于其在运行期进行绑定的特性,JavaScript 中的 this 可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。
    2016-04-04
  • JavaScript 变量命名规则

    JavaScript 变量命名规则

    学习js的朋友一定要知道和注意,其实每种语言都有它的命名规则。
    2009-09-09
  • 浅谈JavaScript字符集

    浅谈JavaScript字符集

    这篇文章主要介绍了JavaScript字符集,需要的朋友可以参考下
    2014-05-05
  • ASP小贴士/ASP Tips javascript tips可以当桌面

    ASP小贴士/ASP Tips javascript tips可以当桌面

    今天看到《ASP小贴士/ASP Tips》 我也去把JavaScript的tips 下下来了。 看看是A4的。 自己把他改成1024 * 768 刚好可以用来做桌面
    2009-12-12
  • Javascript Throttle & Debounce应用介绍

    Javascript Throttle & Debounce应用介绍

    Throttle:无视一定时间内所有的调用Debounce:一定间隔内没有调用时,接下来将为大家介绍下Throttle & Debounce的应用,感兴趣的朋友可以参考下哈
    2013-03-03
  • uniapp实现录音上传功能

    uniapp实现录音上传功能

    这篇文章主要介绍了uniapp 实现录音上传功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 深入理解ECMAScript的几个关键语句

    深入理解ECMAScript的几个关键语句

    下面小编就为大家带来一篇深入理解ECMAScript的几个关键语句。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • javaScript对象和属性的创建方法

    javaScript对象和属性的创建方法

    javaScript对象和属性的创建方法...
    2007-01-01

最新评论