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 FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
Sep 12 Javascript
jq选项卡鼠标延迟的插件实例
May 13 Javascript
Javascript 多浏览器兼容总结(实战经验)
Oct 30 Javascript
js获取光标位置和设置文本框光标位置示例代码
Jan 09 Javascript
jQuery实现下拉框左右选择的简单实例
Feb 22 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
Oct 19 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
使用JavaScript获取Request中参数的值方法
Sep 27 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
Dec 26 Javascript
JS求解三元一次方程组值的方法
Jan 03 Javascript
Vue.js实现立体计算器
Feb 22 Javascript
ajax jquery实现页面某一个div的刷新效果
Mar 04 jQuery
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实现的多维数组去重操作示例
2018/07/21 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
Node.js 回调函数实例详解
2017/07/06 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
tensorflow实现softma识别MNIST
2018/03/12 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
python openpyxl使用方法详解
2019/07/18 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
运动会邀请函范文
2014/02/06 职场文书
小学信息技术教学反思
2014/02/10 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
母婴店促销方案
2014/03/05 职场文书
二年级评语大全
2014/04/23 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
学校捐书倡议书
2015/04/27 职场文书
python 下载文件的几种方式分享
2021/04/07 Python