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 相关文章推荐
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
Aug 18 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
一个CSS+jQuery实现的放大缩小动画效果
Feb 19 Javascript
jQuery实现菜单式图片滑动切换
Mar 14 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
Aug 10 Javascript
js调用刷新界面的几种方式
May 03 Javascript
vue中mint-ui的使用方法
Apr 04 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
Sep 03 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
Dec 28 Javascript
js事件触发操作实例分析
Jun 21 Javascript
微信小程序实现弹框效果
May 26 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实现简易聊天室应用代码
2015/09/23 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
Opacity.js
2007/01/22 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python中的id()函数指的什么
2017/10/17 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
绩效专员岗位职责
2013/12/02 职场文书
小学教师管理制度
2014/01/18 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
英语通知范文
2015/04/22 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
走进毛泽东观后感
2015/06/04 职场文书
公司保密管理制度
2015/08/04 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
python常见的占位符总结及用法
2021/07/02 Python