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 相关文章推荐
jquery多浏览器捕捉回车事件代码
Jun 22 Javascript
原生js写的放大镜效果
Aug 22 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
May 28 Javascript
javascript学习小结之prototype
Dec 03 Javascript
jquery获取文档高度和窗口高度汇总
Jan 25 Javascript
js格式化输入框内金额、银行卡号
Feb 01 Javascript
JavaScript变速动画函数封装添加任意多个属性
Apr 03 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
May 10 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
Aug 09 Javascript
vue实现的封装全局filter并统一管理操作示例
Feb 02 Javascript
vue-iview动态新增和删除的方法
Jun 17 Javascript
Openlayers绘制地图标注
Sep 28 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
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
js实现日期级联效果
2014/01/23 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
小程序实现分类页
2019/07/12 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python实现简单飞行棋
2020/02/06 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
详解python metaclass(元类)
2020/08/13 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
申报职称专业技术个人的自我评价
2013/12/12 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
2016大学军训心得体会
2016/01/11 职场文书