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 相关文章推荐
javascript StringBuilder类实现
Dec 22 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
关于JS字符串函数String.replace()
Apr 07 Javascript
深入理解javaScript中的事件驱动
May 21 Javascript
Egret引擎开发指南之编译项目
Sep 03 Javascript
js在指定位置增加节点函数insertBefore()用法实例
Jan 12 Javascript
Vue.js快速入门实例教程
Oct 15 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
Vue表单验证插件Vue Validator使用方法详解
Apr 07 Javascript
Vue+tracking.js 实现前端人脸检测功能
Apr 16 Javascript
jQuery实现简单三级联动效果
Sep 05 jQuery
如何用JavaScipt测网速
May 09 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 防注入函数(格式化数据)
2011/08/08 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
Python SQLite3数据库操作类分享
2014/06/10 Python
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
python实现连续图文识别
2018/12/18 Python
Django  ORM 练习题及答案
2019/07/19 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
深入了解NumPy 高级索引
2020/07/24 Python
Python之字典对象的几种创建方法
2020/09/30 Python
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
村官工作鉴定评语
2014/01/27 职场文书
请假条怎么写
2014/04/10 职场文书
会计师事务所实习证明
2014/11/16 职场文书
一文搞懂php的垃圾回收机制
2021/06/18 PHP
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript