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 相关文章推荐
js程序中美元符号$是什么
Jun 05 Javascript
node.js中的fs.linkSync方法使用说明
Dec 15 Javascript
JavaScript合并两个数组并去除重复项的方法
Jun 13 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
Oct 20 Javascript
jquery 动态增加删除行的简单实例(推荐)
Oct 12 Javascript
微信小程序新增的拖动组件movable-view使用教程
May 20 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
Jan 25 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
Sep 03 Javascript
Vue $emit $refs子父组件间方法的调用实例
Sep 12 Javascript
vue如何安装使用Quill富文本编辑器
Sep 21 Javascript
Angular设置别名alias的方法
Nov 08 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 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
ftp类(myftp.php)
2006/10/09 PHP
一步一步学习PHP(6) 面向对象
2010/02/16 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
小程序实现搜索框
2020/06/19 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
python如何使用unittest测试接口
2018/04/04 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
关于python中的xpath解析定位
2020/03/06 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
Django静态文件加载失败解决方案
2020/08/26 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
中式面点餐厅创业计划书
2014/01/29 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
小学优秀学生评语
2014/12/29 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python