解决HTML内部元素的Mouse事件干扰

本文介绍了一种在网页设计中实现动态菜单的具体方法,解决了鼠标移动到图片上时显示的DIV菜单,在鼠标移至该DIV时不会消失的问题,并提供了两种有效的解决方案。

 问题:

我正在做一个动态的菜单,也就是WEB页上有一个图片,当把鼠标移动到图片上时,紧挨着图片的下边会有一个列表框,这个列表框我是用一个绝对定位的DIV来做的。现在,我想实现当鼠标移动到图片上时,列表框出现,当鼠标从图片移动到列表框上时,列表框不会消失。但是当鼠标既不在图片上也不再列表框上时,列表框消失。。代码如下:
这是图片和列表框的HTML:

 

以下是他们的CSS

 

下面是写的JS

 

现在出现问题了,当我把鼠标移动到图片上时,DIV列表框出现,这时,他们是紧挨着的,DIV子图片的正下方。。然而当我把鼠标从图片移动到DIV列表框中时。。却总是会执行DIV的onmouseout事件,不知道是什么原因,这样就导致把鼠标从图片移动到DIV上后DIV还是会消失。。忘高手解惑~~

 

 

解答:

话说有一个DIV元素,其内部有一个IMG元素和SPAN元素,不用理会这两个内部元素怎么布局,这不是我要讨论的重点。
为了实现一些特殊的效果,我需要利用TD的onmouseover和onmouseout事件,测试时就会发现如下的状况:
当鼠标移入DIV内部时,onmouseover事件被触发;接着再鼠标移动到DIV内部的IMG或者SPAN元素之上,我们肯定不会认为这时鼠标已经移到了DIV的外边,但奇怪的是onmouseout事件触发了,而且紧接着onmouseover事件也马上被触发了。
这可不是我想要的,那么怎么来“屏蔽”内部元素给外层元素带来的Javascript事件干扰呢?
这里列举两种方法:

一. setTimeout

因为在鼠标移动到内部元素之上而触发了外层元素的onmouseout事件后,外层元素的onmouseover也会马上触发,所以我们只需要把外层元素的onmouseout事件需要执行的动作延迟很短的一段时间来运行,然后在onmouseover事件中再执行clearTimeout方法,这样就可以避免内部元素引起的事件干扰。

这是个很巧妙的的方法,因为当onmouseout触发后,实质性的方法并没有马上执行,而是要等待一小段时间。如果在这段时间里马上又触发了onmouseover事件,那么基本上就可以肯定onmouseout事件的触发是因为内部元素的干扰了,所以在onmouseover事件中使用clearTimeout来阻止延时的方法执行。

二.contains
在onmouseover时先进行如下判断,结果为true时再执行方法体:
if(!this.contains(event.fromElement)){MouseOverFunc()}
在onmouseout时先进行如下判断,结果为true时再执行方法体:
if(!this.contains(event.toElement)){MouseOutFunc()}
下面来解释一下上面两行代码的含义:
在IE中,所有的HTML元素都有一个contains方法,它的作用是判断当前元素内部是否包含指定的元素。我们利用这个方法来判断外层元素的事件是不是因为内部元素而被触发,如果内部元素导致了不需要的事件被触发,那我们就忽略这个事件。
event.fromElement指向触发onmouseover和onmouseout事件时鼠标离开的元素;event.toElement指向触发onmouseover和onmouseout事件时鼠标进入的元素。
那么上面两行代码的含义就分别是:
○ 当触发onmouseover事件时,判断鼠标离开的元素是否是当前元素的内部元素,如果是,忽略此事件;
○ 当触发onmouseout事件时,判断鼠标进入的元素是否是当前元素的内部元素,如果是,忽略此事件;
这样,内部元素就不会干扰外层元素的onmouseover和onmouseout事件了。
但问题又来了,非IE的浏览器并不支持contains函数,不过既然我们已经知道了contains函数的作用,就可以自行添加如下的代码来为非IE浏览器增加contains支持:

 

就上面遇到的问题而言,不能用第一种方法,因为我在DIV的onmouseout事件中要条用event对象,而如果用延迟函数setTimeout,将访问不到event对象。因此本采用第二种解决方案。

 

具体代码如下:

HTML:


CSS:

 

JS:

 

在此,此问题得到解决~

本文的两个解决办法转载CSDN博客:http://blog.csdn.net/sallay/archive/2008/11/12/3280170.aspx,在此感谢~

 

一、基础信息数据集名称:安全防护装备检测数据集图片数量:- 训练集:17,838张图片- 测试集:991张图片分类类别:- 安全帽(helmet)- 反光背心(vest)- 无安全帽(nohelmet)- 无安全背心(NO-Safety Vest)- 口罩(Mask)- 无口罩(NO-Mask)- 安全锥(Safety Cone)- 手套(handgloves)- 头部(head)- 机械(machinery)- 其他(others)- 人员(person)- 鞋子(shoes)- 车辆(vehicle)标注格式:YOLO格式,包含边界框和类别标签,适用于目标检测任务。数据来源:来源于实际场景图像,覆盖工业及安全监控环境。二、适用场景工业安全合规监测:支持目标检测任务,用于构建AI模型自动识别作业人员是否佩戴安全帽、反光背心等防护装备,实时监控工地、工厂等高风险区域的安全规范。智能安防系统开发:集成至CCTV或无人机巡检系统,实现对人员防护状态的自动化分析,提升施工现场或仓储物流的安全管理效率。劳动防护培训与审计:作为企业安全培训工具的底层数据,辅助生成违规案例可视化报告,强化员工安全意识。学术研究与标准制定:支持计算机视觉在工业安全领域的算法优化研究,为安全防护装备检测标准提供数据基准。三、数据集优势全面覆盖安全防护类别:包含14个精细类别,涵盖头盔、背心、手套等核心防护装备及其缺失状态,同时包含环境干扰项(如机械、车辆),确保模型在实际场景中的鲁棒性。高实用性标注与数据规模:- 标注基于真实工业场景,边界框精准定位目标对象,适配YOLO等主流检测框架。- 超1.8万张训练图片提供丰富样本,支持模型学习多样光照、角度及遮挡情况下的检测任务。场景适应性强:数据源自建筑、制造等实际环境,包含高空作业、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值