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 相关文章推荐
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
javascript引用类型指针的工作方式
Apr 13 Javascript
jquery遍历标签中自定义的属性方法
Sep 17 Javascript
Vue.js如何优雅的进行form validation
Apr 07 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
Apr 20 Javascript
AngularJS实现的简单拖拽功能示例
Jan 02 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
在小程序中使用Echart图表的示例代码
Aug 02 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
Jun 10 Javascript
精读《Vue3.0 Function API》
May 20 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
php5新改动之短标记启用方法
2008/09/11 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
python中常用的九种预处理方法分享
2016/09/11 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
python 中xpath爬虫实例详解
2019/08/26 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
可靠的数据流传输TCP
2016/03/15 面试题
shell程序中如何注释
2012/02/17 面试题
精彩的大学生自我评价
2013/11/17 职场文书
银行出纳岗位职责
2013/11/25 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
2014年采购部工作总结
2014/11/20 职场文书
毕业生个人自荐书
2015/03/05 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
Nebula Graph解决风控业务实践
2022/03/31 MySQL