当前位置: 首页 > 编程笔记 >

onmouseover事件和onmouseout事件全面理解

闻人景澄
2023-03-14
本文向大家介绍onmouseover事件和onmouseout事件全面理解,包括了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有这两个事件所以就发生了我们看到的情况。

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

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

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

  而而Microsoft在mouseover和mouseout事件中添加了两个属性

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

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

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事件的全面了解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍什么是JavaScript中的onmouseout事件?,包括了什么是JavaScript中的onmouseout事件?的使用技巧和注意事项,需要的朋友参考一下 当鼠标指针移出元素时,将触发此事件。 示例 您可以尝试运行以下代码以了解如何在JavaScript中使用onmouseout事件-

  • 本文向大家介绍什么是JavaScript中的onmouseover事件?,包括了什么是JavaScript中的onmouseover事件?的使用技巧和注意事项,需要的朋友参考一下 的onmouseover 事件触发时在一个元素上鼠标指针移动。 示例 您可以尝试运行以下代码以了解如何在JavaScript中使用onmouseover 事件-

  • 我正在创建一个评级系统来给图片评级。我想将onClick和onMouseOver事件应用到我为系统渲染的星星上。 onMouseOver:根据鼠标悬停的星星,应该填充星星以及悬停的星星之前的星星。如果我把星星留在div容器里,那么就不会填满星星。例如,对于4颗星,如果我悬停在第3颗星上,那么应该填写1-3颗星。如果我不悬停在任何星星上,就不应该填充任何星星。 onClick:与上面类似,除了星星将

  • 本文向大家介绍如何从onmouseout事件中调用JavaScript函数?,包括了如何从onmouseout事件中调用JavaScript函数?的使用技巧和注意事项,需要的朋友参考一下 当您将鼠标从该元素移出时,onmouseout会触发。 示例 您可以尝试运行以下示例,以了解如何从onmouseout事件中调用JavaScript函数

  • 8.3.1 事件和事件对象 事件是针对应用程序所发生的事情,并且需要应用程序对它做出响应或进行处理。Tkinter中定义了很多种事件,足以支持常见的 GUI 应用程序开发。 Tkinter 事件可以用特定形式的字符串来描述,称为事件模式。事件模式的一般形式是: <modifier-type-detail> 其中类型符 type 指定事件类型,最常用的类型有分别表示鼠标事件和键盘事件的 Butto

  • 本文向大家介绍学习JavaScript事件流和事件处理程序,包括了学习JavaScript事件流和事件处理程序的使用技巧和注意事项,需要的朋友参考一下 本文全篇介绍了JavaScript事件流和事件处理程序,分享给大家供大家参考,具体内容如下 一、事件流 事件流描述的是从页面中接收事件的顺序。IE的事件流是事件冒泡流,而Netscape Communicator的事件流是事件捕获流。 二、事件冒泡