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基本概念初级讲解论坛贴的学习记录
Feb 22 Javascript
prototype 中文参数乱码解决方案
Nov 09 Javascript
24款非常有用的 jQuery 插件分享
Apr 06 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
Apr 12 Javascript
jquery制作 随机弹跳的小球特效
Feb 01 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
bootstrap侧边栏圆点导航
Jan 11 Javascript
Angular.JS去掉访问路径URL中的#号详解
Mar 30 Javascript
微信小程序之网络请求简单封装实例详解
Jun 28 Javascript
轻松理解vue的双向数据绑定问题
Oct 30 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
Jan 27 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连接Oracle for NT 远程数据库
2006/10/09 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
Ext面向对象开发实践(续)
2008/11/18 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python中AND、OR的一个使用小技巧
2015/02/18 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
个人求职简历中英文自我评价
2013/12/16 职场文书
合同专员岗位职责
2013/12/18 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
微笑服务演讲稿
2014/05/13 职场文书
广播体操口号
2014/06/18 职场文书
2015年调度员工作总结
2015/04/30 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书