[Java教程]关于onmouseover和onmouseout的bug

0 2016-11-01 23:02:52

总结了一下关于使用onmouseover以及onmouseout会出现的bug

首先简单的布局:

这是一个内容

简单写了一下样式,效果如下:

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事件以及可以解决以上问题,使用方法相同。

本文网址:http://www.shaoqun.com/a/261896.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

seo

0

java onmouseover_[Java教程]关于onmouseover和onmouseout的bug相关推荐

  1. Java 并发/多线程教程(四)-并发模型

    本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 并发系统可以有多 ...

  2. Java 并发/多线程教程(五)-相同线程

    本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 相同线程是一并发框架模型,是一个单线程系统向外扩展成多个单线程的系统.这样的结果就是 ...

  3. Windows下Libvirt Java API使用教程(二)- 接口使用说明

    介绍完libvirt Java API的部署工作: <Windows下Libvirt Java API使用教程(一)- 开发环境部署> 接下来我们就介绍一下接口的使用和代码样例. libv ...

  4. Java NIO系列教程(十二) Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  5. Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态链接文件依赖

    之前已经介绍过了libvirt api的上手使用方式: <Windows下Libvirt Java API使用教程(二)- 接口使用说明> <Windows下Libvirt Java ...

  6. Java Servlet完全教程

    本文来自Java Servlet完全教程 Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广 ...

  7. Java NIO系列教程(三) Buffer

    2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...

  8. Hyperledger Fabric Java SDK最新教程

    Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK ...

  9. Java NIO系列教程(五) 通道之间的数据传输

    在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...

最新文章

  1. 最新!百度首发 OCR 自训练平台 EasyDL OCR
  2. 奇淫异巧之 PHP 后门
  3. 华为防火墙ftp_FTP被动模式访问问题
  4. 关于FCN的数据集着色说明
  5. YBTOJ:字符串匹配(KMP)
  6. java 多模块模块变灰色_到底谁需要Java模块?
  7. 微星刀锋 无法进入bios_夏天来了 微星主板风扇转速调节攻略
  8. 【高级数据类型】- 5.通道类型
  9. Win8之开机启动项
  10. 路普达-区块链系统开发项目之DAPP
  11. shell脚本执行时报“bad interpreter: Text file busy“的解决方法
  12. 男孩子一定要注意保护自己!
  13. 189. Rotate Array
  14. python缩进格式错误修改_Python,意外的缩进错误解析,Pythonunexpectedindent,解决,方法...
  15. PHP sql IN查询改成子查询
  16. 池与线程池 技术点 目录 1. 线程池作用: 提升性能 1 2. 使用流程 1 3. 线程与线程池的监控 jvisual 1 4. 线程常用方法 2 5. 线程池相关概念 2 5.1. 队列
  17. synchronized工作原理剖析(二)
  18. python里面的模块怎么下载_python下载模块然后怎么安装
  19. [C#]Excel画斜线以及Excel宏的利用
  20. 芜湖市市一中2021年高考成绩查询,2021年芜湖各高中录取分数线预测

热门文章

  1. 会议纪要模板/数据分析需求文档
  2. Nodejs——setInterval循环器使用
  3. java设计一个bank类实现银行_用java实现银行系统
  4. setInterval读取外部变量
  5. 全国各地公用DNS服务器IP列表
  6. mysql derived优化,SQL优化:derived 派生表优化
  7. 架构决定可扩展性--重排和压缩/分组交换网
  8. 莎士比亚风格的文本生成任务
  9. ios--时间格式化--NSDateFormatter
  10. sql语句的增加、删除、修改、查询语句