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 相关文章推荐
Js 弹出框口并返回值的两种常用方法
Dec 30 Javascript
JS简单实现元素复制示例附图
Nov 19 Javascript
基于Jquery实现键盘按键监听
May 11 Javascript
javascript 小数取整简单实现方式
May 30 Javascript
实例讲解JQuery中this和$(this)区别
Dec 08 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
Apr 06 Javascript
AngularJS控制器controller正确的通信的方法
Jan 25 Javascript
详解js中的apply与call的用法
Jul 30 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
JavaScript实现的联动菜单特效示例
Jul 08 Javascript
Vue配置marked链接添加target="_blank"的方法
Jul 19 Javascript
Node.js API详解之 vm模块用法实例分析
May 27 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笔记之:基于面向对象设计的详解
2013/05/14 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
JS解析XML实例分析
2015/01/30 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
python学生信息管理系统(完整版)
2020/04/05 Python
python交换两个变量的值方法
2019/01/12 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
什么是反射
2012/03/17 面试题
幼教简历自我评价
2014/01/28 职场文书
平安建设汇报材料
2014/12/29 职场文书
2015年营业员工作总结
2015/04/23 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang