onmouseover事件和onmouseout事件全面理解


Posted in Javascript onAugust 15, 2016

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

首先实现一个盒子:

onmouseover事件和onmouseout事件全面理解

给这个盒子上绑定上onmouseover事件和onmouseout事件

onmouseover事件和onmouseout事件全面理解

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

onmouseover事件和onmouseout事件全面理解

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

onmouseover事件和onmouseout事件全面理解

我们依旧只给外层父元素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 相关文章推荐
Apply an AutoFormat to an Excel Spreadsheet
Jun 12 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
JavaScript如何实现组合列表框中元素移动效果
Mar 01 Javascript
AngularJS模块详解及示例代码
Aug 17 Javascript
Bootstrap table简单使用总结
Feb 15 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
详解node.js中的npm和webpack配置方法
Jan 21 Javascript
vue判断input输入内容全是空格的方法
Mar 02 Javascript
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
vue登录注册实例详解
Sep 14 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
Aug 15 #Javascript
又一款js时钟!transform实现时钟效果
Aug 15 #Javascript
最丑的时钟效果!js canvas时钟制作方法
Aug 15 #Javascript
深入分析javascript中console命令
Aug 14 #Javascript
Vue.js 表单校验插件
Aug 14 #Javascript
Vue.js学习笔记之 helloworld
Aug 14 #Javascript
详解Node.js如何开发命令行工具
Aug 14 #Javascript
You might like
用php过滤危险html代码的函数
2008/07/22 PHP
php简单的会话类代码
2011/08/08 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
JSON JQUERY模板实现说明
2010/07/03 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python lambda和Python def区别分析
2014/11/30 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
python使用psutil模块获取系统状态
2016/08/27 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
Python sublime安装及配置过程详解
2020/06/29 Python
Python实现随机爬山算法
2021/01/29 Python
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
应届医学毕业生求职信分享
2013/12/02 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
增员口号大全
2014/06/18 职场文书
欢送会主持词
2015/07/01 职场文书
法制教育主题班会
2015/08/13 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server