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 相关文章推荐
番茄的表单验证类代码修改版
Jul 18 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
Nov 16 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
Feb 07 Javascript
js渐变显示渐变消失示例代码
Aug 01 Javascript
jQuery中animate()方法用法实例
Dec 24 Javascript
JS实现回到页面顶部动画效果的简单实例
May 24 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
JS中with的替代方法与String中的正则方法详解
Dec 23 Javascript
使用JS动态显示文本
Sep 09 Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
Vue解析剪切板图片并实现发送功能
Feb 04 Javascript
原生小程序封装跑马灯效果
Oct 21 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
77A一级收信机修理记
2021/03/02 无线电
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
前端微信支付js代码
2016/07/25 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
jQuery中的for循环var与let的区别
2018/04/21 jQuery
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
python中的global关键字的使用方法
2019/08/20 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
简单介绍Object类的功能、常用方法
2013/10/02 面试题
教师找工作推荐信
2013/11/23 职场文书
新春寄语大全
2014/04/09 职场文书
竞选村长演讲稿
2014/04/28 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
师德师风自我评价范文
2014/09/11 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
2014年副班长工作总结
2014/12/10 职场文书
辞职信怎么写
2015/02/27 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书