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 相关文章推荐
JavaScript获取GridView选择的行内容
Apr 14 Javascript
Prototype 工具函数 学习
Jul 23 Javascript
学习ExtJS border布局
Oct 08 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
Dec 26 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
JavaScript实现的类字典插入或更新方法实例
Jul 10 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
Dec 20 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
Sep 27 Javascript
jQuery中ajax错误调试分析
Dec 01 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
Sep 05 Javascript
vue ssr+koa2构建服务端渲染的示例代码
Mar 23 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连接mssql的一些相关经验及注意事项
2013/02/05 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python实现多线程采集的2个代码例子
2014/07/07 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python多进程并发demo实例解析
2019/12/13 Python
Django静态文件加载失败解决方案
2020/08/26 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
Ado与Ado.net的相同与不同
2014/12/08 面试题
团工委书记自荐书范文
2013/12/17 职场文书
大学生如何写自荐信
2014/01/08 职场文书
校园之星获奖感言
2014/01/29 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
社团活动总结格式
2014/08/29 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
学术会议通知范文
2015/04/15 职场文书
历史博物馆观后感
2015/06/05 职场文书
公司业务员管理制度
2015/08/05 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js