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 1.3 和 Validation 验证插件1.5.1
Jul 09 Javascript
Js参数值中含有单引号或双引号问题的解决方法
Nov 06 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
jQuery实现折线图的方法
Feb 28 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
Aug 04 Javascript
微信小程序 特效菜单抽屉效果实例代码
Jan 11 Javascript
bootstrap手风琴制作方法详解
Jan 11 Javascript
JavaScript中localStorage对象存储方式实例分析
Jan 12 Javascript
vue路由嵌套的SPA实现步骤
Nov 06 Javascript
JS文件中加载jquery.js的实例代码
May 05 jQuery
基于Proxy的小程序状态管理实现
Jun 14 Javascript
微信小程序实现同时上传多张图片
Feb 03 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 和 COM
2006/10/09 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
iOS10推送通知开发教程
2016/09/19 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
JavaScript字符串对象
2017/01/14 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
详解vue 组件
2020/06/11 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
python操作MySQL数据库具体方法
2013/10/28 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
举例讲解Python常用模块
2019/03/08 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
采购主管的岗位职责
2013/12/17 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
安全责任书
2015/01/29 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
党员干部学习心得体会
2016/01/23 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript