关于onmouseover和onmouseout的bug
总结了一下关于使用onmouseover以及onmouseout会出现的bug
首先简单的布局:
<div id="box">
<div>这是一个内容</div>
</div>
简单写了一下样式,效果如下:

js代码如下:
var oBox = document.getElementById("box");
oBox.onmouseover = function(){
alert(“移入");
}
oBox.onmouseout = function(){
alert("移出");
}
需要的效果是移入时alert(“移入"),移出时alert("移出");
然而会产生一个bug,当鼠标从灰色移动到粉色区域,或者从粉色移动到灰色区域的时候,仍然会触发onmouseover和onmouseout 事件.
解决思路:判断来源,如果从盒子里面移动则不触发。
首先,要借助事件对象,对事件对象进行兼容处理:
var oEvent = ev || event;
事件对象中有一个属性fromElemen,获得来源,但是也存在兼容问题,只适用于高级浏览器,在chrome和ie里有relatedTarget属性
var oFrom = oEvent.fromElement || oEvent.relatedTarget
判断是是否在内部移动,是则直接return返回
//判断是否包含
if(oFrom && oBox.contains(oFrom)){
return;
}
最后js代码如下:
oBox.onmouseover = function(ev){
var oEvent = ev || event;//兼容处理
var oFrom = oEvent.fromElement || oEvent.relatedTarget;//兼容处理
//如果在里面则返回
if(oFrom && oBox.contains(oFrom)){
return;
}
alert("移入");
};
同理,onmoouseout的解决方法代码如下:
oBox.onmouseout = function(ev){
var oEvent = ev || event; //处理兼容
var oTo = oEvent.toElement || oEvent.relatedTarget; //处理兼容
//如果在里面则返回
if(oTo && oBox.contains(oTo)){
return;
}
alert("移出");
};
关于兼容问题,ev属于高级浏览器,event属于ie
relatedTarget属于高级浏览器,fromElement和toElement属于chrome和ie
最后介绍一种简便方法,onmouseenter事件和onmouseleave事件以及可以解决以上问题,使用方法相同。
关于onmouseover和onmouseout的bug的更多相关文章
- onmouseover和onmouseout的bug
脑子不好用了,一点东西要看几遍才能记住,学过的东西也要好几遍,悲哀. 习惯了jquery的hover,或者看过hover源码,或者是正美的<框架设计>,onmouseover和onmous ...
- onmouseover和onmouseout的那些事
这篇文章来自一个偶然...以前刚开始学习javascript事件的时候就被一个东西搞得晕头撞向的.就是一对名字很相近的事件.一组是onmouseover()和onmouseout().另一组就是onm ...
- JQuery 之事件中的 ----- hover 与 onmouseover 、onmouseout 联系
hover([over,]out) 一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法.这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态. 当鼠标移动到一个匹配的元素 ...
- onmouseover和onmouseout的烦恼
一个DIV层,当鼠标移进的时候会触发onmouseover,移出的时候会触发onmouseout. 非常easy的逻辑,这也是我们想要的!但随之烦恼也就来了:onmouseover并不会仅仅在移进 ...
- 使用HTML DOM 来分配事件 —— onmouseover和onmouseout ,onmousedown和onmouseup
一, onmouseover 和 onmouseout 事件 onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数. 一个小例:鼠标未在 ...
- JS:onmouseover 、onmouseout
鼠标移动到P标签上时,改变文本和边框样式 <style type="text/css"> .onmouseover { color: red; border: 1px ...
- 【try..catch..】【判断输入是否为空】【onchange事件】【onmouseover和onmouseout事件】【onmousedown和onmouseup事件】
1.try..catch.. <body><script>function myFunction(){try{ var x=document.getElementById(&q ...
- Repeater控件添加onmouseover和onmouseout事件
网友有问题,在Repeater控件中,需要添加onmouseover和onmouseout事件功能.Insus.NET有叫他参考<onmouseover和onmouseout在Repeater控 ...
- HTML事件(onclick、onmouseover、onmouseout、this)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- hyper-v虚拟化管理
一. 什么是Hyper-V? Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术. Hyper-V ...
- 通过Robocopy+DOS 命令+Windows排程实现自动备份(将特定文件/目录备份至自动创建的以年月日命名的目标目录)
1. Software Requirement: 1.1.mirror.bat .mirror_SERVICE_BEGIN.mirror_SERVICE_END.robocopy.exe 1.2. C ...
- wordpress stratus模板使用 产品显示问题
产品不显示,只显示展示产品代码. 1.研究原站demo,思考产品展示调用自woocommerce. 2.查看woocommerce文档,更新展示代码. 3.修改后产品出现,但是多余的关联推荐也展示出来 ...
- C# 加密解密文件
using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptograph ...
- c# mybatis net +mysql
1找到 mybatis.net最好有个例子 http://www.codeproject.com/Articles/894127/WebControls/#_comments 在这里... 这是一 ...
- 1.使用Entity Framwork框架常用的技术手段Code First 和Reverse Engineer Code First
提示:VS版本2013, Entity Framwork版本5.0.0,Mysql数据库 使用Entity FrameWork的好处就不多说,直接上手如何使用.两种形式:1.将代码映射到数据库实体 ...
- Django URL的命令空间
为避免在模板中使用URL的硬编码,可以使用{% url %}模板标签来解决 <li><a href="/task/{{ task.id }}/">{{ ta ...
- python目录操作shutil
#coding:utf-8 import os import shutil #将aaa.txt的内容复制到bbb.txt shutil.copy('aaa.txt','bbb.txt') #将aaa. ...
- js的原型模式
以下内容来自<JavaScript高级程序设计>第三版 我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所 ...
- php:微信公众号token验证失败原因、验证码显示不出来的问题
ob_clean(); 问题描述: 用微信官方提供的demo验证token是成功的,但是放到自己网站的框架上进行token验证老是提示"token验证失败",经过检查(用生成日志的 ...