onmouseover和onmouseout的一些问题思考


Posted in Javascript onAugust 14, 2013

一个DIV层,当鼠标移进的时候会触发onmouseover,移出的时候会触发onmouseout。
onmouseover和onmouseout的一些问题思考 
很简单的逻辑,这也是我们想要的!但随之烦恼也就来了:onmouseover并不会只在移进时才触发,onmouseout也不会只在移出时才触发!鼠标在DIV里面移动时也会可能触发onmouseover或onmouseout。
onmouseover和onmouseout的一些问题思考 
在上图中,对于'A'来说:当鼠标进入'A'(路径'1′)时那么就会触发'A'的onmouseover事件;接着鼠标移动到'B'(路径'2′),此时'A'会触发onmouseout(先)和onmouseover(后)事件。

由此可见,如果HTML元素(‘A'层)内还有其他元素(‘B','C'层),当我们移动到这些内部的元素时就会触发最外层(‘A'层)的onmouseout和onmouseover事件。

这两个事件的触发表现真的就是你想要的吗?也许你需要一个只在移进时才触发的,一个只在移出时才触发的事件,不管其内部是否还有其他元素….

解决方案

在IE下确实有你需要的两个这样事件:onmouseenter 和 onmouseleave。但很不幸FF等其他浏览器并不支持,只好模拟实现:

document.getElementById('...').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 事件的处理代码 
} 
} 
document.getElementById('...').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 事件的处理代码 
} 
}

备注:

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

•在mouseover事件中,它表示鼠标来自哪个元素
•在mouseout事件中,它指向鼠标去往的那个元素
而Microsoft在mouseover和mouseout事件中添加了两个属性

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

Javascript 相关文章推荐
Add a Picture to a Microsoft Word Document
Jun 15 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
May 04 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
Aug 27 Javascript
利用bootstrapValidator验证UEditor
Sep 14 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
Oct 18 Javascript
jQuery鼠标移动图片上实现放大效果
Jun 25 jQuery
微信小程序点击控件修改样式实例详解
Jul 07 Javascript
webpack3+React 的配置全解
Aug 21 Javascript
关于laydate.js加载laydate.css路径错误问题解决
Dec 27 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
Sep 17 Javascript
js之onload事件的一点使用心得
Aug 14 #Javascript
jQuery Animation实现CSS3动画示例介绍
Aug 14 #Javascript
JavaScript中json使用自己总结
Aug 13 #Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 #Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 #Javascript
javascript中RegExp保留小数点后几位数的方法分享
Aug 13 #Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
Aug 13 #Javascript
You might like
自动跳转中英文页面
2006/10/09 PHP
php缓存技术介绍
2006/11/25 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
Firefox div高度自适应
2009/04/28 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
python如何把嵌套列表转变成普通列表
2018/03/20 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
Python 实现微信防撤回功能
2019/04/29 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
Python with语句和过程抽取思想
2019/12/23 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
.NET面试10题
2014/02/24 面试题
离婚协议书该怎么写
2014/10/04 职场文书
入党函调证明材料
2014/12/24 职场文书
团代会邀请函
2015/02/02 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python
MySQL为id选择合适的数据类型
2021/06/07 MySQL
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript