微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

onmouseover事件和onmouseout事件全面理解

  这两天接触了onmouSEOver事件和onmouSEOut事件,一直以为它们只是简单的分别实现鼠标指针移动到元素上时触发事件和在鼠标指针移出指定的对象时触发事件,但是突然发现这些只是对它们简单的描述,下面让我们一起看看它们终究还有神马奇怪的特性,是好还是坏呢?

  首先实现一个盒子:

  给这个盒子上绑定上onmouSEOver事件和onmouSEOut事件

  发现它们不会发生什么问题,然后(嘿嘿,你懂得!)

  让我们创建一个B元素,让它被嵌套在A元素中,作为A的子元素

  我们依旧只给外层父元素A绑定onmouSEOver事件和onmouSEOut事件,你会发现发生什么了呢?对,没错!当鼠标移入移除A的子元素B的时候居然也发生了onmouSEOver事件和onmouSEOut事件!!Why?这不是我想要的!难道这时候B就不在是A的一部分了吗?当然不是,要不也不会在移入B元素时发生onmouSEOver事件。这样证明,B元素还是A不可分割的一部分啊。

  那到底是怎么回事呢?终究还是事件冒泡搞得鬼?大家都知道常用的浏览器中有两种事件流:事件冒泡和事件捕获。让我们看一下事件冒泡的定义:事件按照从最特定的事件目标逐级向上传播到最不特定的事件目标(document对象)的顺序。所以说当鼠标移入移除A的子元素B的时候,B的onmouSEOver事件和onmouSEOut事件会触发,但是它自己没有这两个事件啊,就把这两个事件传递给了它的父元素A,A有这两个事件所以就发生了我们看到的情况。

  有人会说那怎么避免呢,毕竟不是所有人都会是这种需求嘛,我们只要父级元素的事件触发就好,子级元素就让它静静的当个美男子就好了。

  SEOver和mouSEOut事件中添加relatedTarget属性

SEOver事件中,它表示鼠标来自哪个元素   •在mouSEOut事件中,它指向鼠标去往的那个元素

SEOver和mouSEOut事件中添加了两个属性

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

  所以我们就有了如下代码的实现

rush:js;"> document.getElementById('Box1').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 事件的处理代码 alert('111'); } } document.getElementById('Box1').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 事件的处理代码 alert('2222'); } }

以上所述是小编给大家介绍的onmouSEOver事件和onmouSEOut事件的全面了解。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐