如何防止鼠标移出移入子元素触发mouseout和mouseover事件

解决方案:c#鼠标离开到子控件也触发MouseLeave事件的解决方法 最近做c#的UI开发,有个非常烦恼的问题,就是Panel的MouseLeave事件,当鼠标移动到Panel的子控件时也会触发MouseLeave事件,摸索了半天,终于发现了一个高效的方法。 该方法的思想是当Panel添加子控件时,为添加的子控件也添加鼠标离开事件,当子控件发生鼠标离开事件时,判断是否鼠标坐标在Panel的Rectangle内,如果在Panel内则不发生事件,否则就发生Panel的 阅读详情

我想实现的目标:当鼠标进入黑色框时,橙色框执行淡入动画;当黑色框范围移动的时候(即使经过粉色框,动画仍然不被触发);当鼠标移出的时候,橙色方块消失。

遇到的问题阐述:当鼠标移入黑色框的时候,橙色框执行淡入动画,但是当鼠标从黑色框经过粉色框的时候,橙色框就消失了,然后又执行一遍淡入动画。当鼠标从粉色框移出到黑色框的时候,橙色框的淡入动画又被执行。这不是我想要的。

初期代码:

<!DOCTYPE html>

<html>

<head>

<script src="jquery.js"></script>

 <meta charset="utf-8">

 <title>mouseover mouseout</title>

 <style type="text/css"media="screen">

   .parent{

 width:200px;

 height:200px;

 background:black;

}

.child{

 width:100px;

 height:100px;

 background:pink;

}

.a1{

 width:40px;

 height:40px;

 background:orange;

 display:none;

}

 </style>

</head>

<body>

<div class="parent">

 <div class="child"></div>

 <div class="a1"></div>

</div>

<script>

$('.parent').on('mouseover',function(e){

  $('.a1').show(1000);

 });

 $('.parent').on('mouseout',function(e){

  $('.a1').css('display','none');

 });

</script>

</body>

</html>


当鼠标从黑色框移到粉色框的时候,此时黑色框的mouseout的被触发,又由于事件冒泡,黑色框的mouseover事件随即被触发,所以实际上,橙色框先消失,然后立即执行淡入动画。这也就是我们看到的过程。首先我们解释一下原因,为什么会出现这些问题。

当鼠标从粉色框移到黑色框的时候,此时黑色框的mouseout又被触发(因为不论鼠标穿过被选元素或其子元素,都触发 mouseover 事件),同时mouseover也被触发,所以又出现了再次执行淡入效果的过程。

方法一:用mouseenter/mouseleave代替mouseover/mouseout【最佳方法】

先看一下mouseout&mouseover与mouseleave&mouseenter用法上的区别

mouseover与mouseenter

不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。
只有在鼠标指针从元素外穿入被选元素(到元素内)时,才会触发 mouseenter 事件。

mouseout与mouseleave

不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。
只有在鼠标指针从元素内穿出被选元素(到元素外)时,才会触发 mouseleave 事件。

可以看一个简单的例子看看二者的区别

所以改进的代码可以为

<!DOCTYPE html>

<html>

<head>

<script src="jquery.js"></script>

 <meta charset="utf-8">

 <title>mouseover mouseout</title>

 <style type="text/css"media="screen">

   .parent{

 width:200px;

 height:200px;

 background:black;

}

.child{

 width:100px;

 height:100px;

 background:pink;

}

.a1{

 width:40px;

 height:40px;

 background:orange;

 display:none;

}

 </style>

</head>

<body>

<div class="parent">

 <div class="child"></div>

 <div class="a1"></div>

</div>

<script>

$('.parent').on('mouseenter',function(e){

  $('.a1').show(1000);

 });

 $('.parent').on('mouseleave',function(e){

  $('.a1').css('display','none');

 });

</script>

</body>

</html>


e.stopPropagation()会终止事件在传播过程的捕获、目标处理或起泡阶段进一步传播。调用该方法后,该节点上处理该事件的处理程序将被调用,事件不再被分派到其他节点。方法二:利用e.stopPropagation()阻止事件进一步传播

<!DOCTYPE html>

<html>

<head>

<script src="jquery.js"></script>

 <meta charset="utf-8">

 <title>mouseover mouseout</title>

 <style type="text/css"media="screen">

   .parent{

 width:200px;

 height:200px;

 background:black;

}

.child{

 width:100px;

 height:100px;

 background:pink;

}

.a1{

 width:40px;

 height:40px;

 background:orange;

 display:none;

}

 </style>

</head>

<body>

<div class="parent">

 <div class="child"></div>

  <div class="a1"></div>

</div>

 <script>

 $('.parent').on('mouseover',function(e){

   $('.a1').show(1000);

 });

 $('.parent').on('mouseout',function(e){

   $('.a1').css('display','none');

 });

 $('.child').on('mouseover',function(e){

  e.stopPropagation();

  $('.a1').css('display','block');

  //这是保证动画体的末状态不变

 });

 $('.child').on('mouseout',function(e){

  e.stopPropagation();

  //防止从粉色框移出到黑色框时再次触发其他事件

 })

 </script>

</body>

</html>


1.如果子元素过多怎么办,难道每个都要去绑定e.stopPropagation()?拓展思考:

用jquery的一个选择器.children(),比如$('.parent').children()。获得匹配元素集合中每个元素的子元素。

以上所述就是本文的全部内容了,希望大家能够喜欢。

阻止 mousemove 或 touchmove 与 click 事件同时触发 最近做了自己的开源项目 Msw-Tools,参考了 VConsole 工具中按钮的拖拽功能,计划给 MSW 按钮也增加类似的拖拽效果,并兼容PC端和手机端,但是遇到一个问题:一个按钮绑定了多个事件,怎样才能阻止 mousemove 或 touchmove 与 click 事件同时触发。 阅读详情

相关推荐

实现高效用户体验的鼠标事件管理模块设计

监听器接口通常由几个基本的事件处理函数组成,包括但不限于onClickonSubmitonBlur等。开发者可以通过这些接口为特定的事件类型添加自定义的处理逻辑。// 示例代码:添加事件监听器');});在上述代码中,方法被用来注册一个事件监听器,它接受两个参数:事件类型和一个事件处理函数。当用户点击指定的按钮时,控制台将输出一条消息。mouseover和mouseout事件是Web开发中常见的鼠标事件,它们为开发者提供了与用户鼠标交互的直接方式。

weixin_42591413的博客 1007

html层叠 鼠标穿透,解决IE下重叠div对mouseover事件的穿透方法之

历经一天半的时间,我这前端的白痴终于想到了一个解决IE下重叠div对mouseover 事件的穿透方法。现象: 两个并列关系的Div(没有父子关系),但是两个Div在位置上面有重叠,当鼠标在两个div重叠部分的时候,会触发下层div的mouseover事件(IE),从而触发上层div的mouseleave事件。注意:两个div没有父子关系,所以我没有在事件冒泡上面进行探索,我对各种浏览器事件冒泡...

weixin_39785081的博客 1759

特斯拉数字孪生4.0体系解析:从“数字镜像“到“持续进化“的造车革命

当每一辆汽车都拥有自己的“数字分身”,我们正见证的不仅是技术革新,更是整个制造业文明形态的跃迁。其数字孪生体已超越“数字镜像”的被动属性,成为。特斯拉年服务收入超1200美元/车的业绩表明,数字孪生正在将汽车从“交通工具”转变为“持续增值的智能终端”。构建起覆盖设计、制造、使用、服务全链条的虚拟镜像体系,将物理世界与数字世界的融合推向新高度。:特斯拉的实践证明,数字孪生已从“技术选项”升级为“战略必选项”。不仅重塑了汽车产品的价值创造逻辑,更预示着整个制造业向“元宇宙工业”演进的新范式。

beige888的博客 1608

mouseover和mouseout多次触发解决方法(兼容ie和firefox)

在用到mouseover和mouseout事件来作为事件触发的条件,但是如果我们用做触发的元素内部有其他的元素的时候当鼠标移上的时候会反复的触发mouseover和mouseout事件。因为内部元素在鼠标移上的时候会向它的父对象派发事件,所以外面元素相当于也触发了mouseover 事件。 为了阻止mouseover和mouseout的反复触发,这里要用到event对象的一个属性relate

im_sk的窝 1432

TBtools的序列提取步骤

本教程详细介绍了如何使用TBtools软件从原来的FASTA序列中提取特定的DNA序列。

weixin_47509995的博客 1万+

智能气象站:ESP32驱动的心知天气数据可视化实践

本文详细介绍了基于ESP32微控制器和心知天气API构建智能气象站的完整实践。通过Arduino开发环境,实现天气数据的获取、JSON解析与OLED屏可视化展示,涵盖硬件连接、API配置、低功耗优化及部署问题排查,为物联网开发者提供实用指南。

jump7的博客 210

【jQuery】前端面试题之mouseover与mouseenter的区别

                          mouseover与mouseenter的区别 请先看下面讲解,文章最后有源代码 页面上有4个div,div2是div1的子元素,div4是div3的子元素        给 div1 绑定了mouseover() 和 mouseout() 事件监听        给 div3 绑定了mouseenter() 和 mouseleave()...

星光不问赶路人,时光不负有心人。 808

fastbin attack快速入门

0x01 fastbin简介 Fastbin包含0x20~0x80大小bin的数组指针,用于快速分配小堆块。fastbin按照单链表结构进行组织,相同大小的bin在同一个链表中,fd指向下一个bin,采用LIFO(Last In First Out)机制。在fastbin中,堆块的inuse标志都为1,处于占用状态,防止chunk释放时进行合并,加快小堆块的分配。 正常fastbin的使用 通过这个简单的案例来了解fastbin的单链表结构,malloc和free的过程。 #include<stdio

abelxu 1571

React 解决鼠标移入子元素触发父元素的mouseout事件

方法一、 用mouseleave/mouseenter代替mouseover/mouseout【最佳方法】 mouseover 与 mouseenter: mouseover => 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。 mouseenter => 只有在鼠标指针从元素外穿入被选元素(到元素内)时,才会触发 mouseenter 事件。 mouseout 与 mouseleave: mouseout => 不论鼠标指针离开被选元素还是任何子元素,都会触发

qq_36904182的博客 4748

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 114

JESD204B系统设计实战:如何用SYSREF信号搞定多设备时钟同步(附时序图详解)

本文深入探讨了JESD204B系统中SYSREF信号在多设备时钟同步中的关键作用与实现技巧。通过详细分析SYSREF信号的生成、PCB布局和时序调整,提供了一套完整的解决方案,帮助工程师解决高速数据转换器与FPGA协同工作中的时钟同步问题。文章还包含时序图详解和实测调试技巧,助力提升系统性能。

weixin_29313239的博客 454

关于mouseover/mouseout事件重复触发的问题

  在用到mouseover和mouseout事件来作为事件触发的条件,但是如果我们用做触发的元素内部有其他的元素的时候当鼠标移上的时候会反复的触发mouseover和mouseout事件。因为内部元素在鼠标移上的时候会向它的父对象派发事件,所以外面元素相当于也触发了mouseover 事件。   为了阻止mouseover和mouseout的反复触发,这里要用到event对象的一个属性relatedTarget,这个属性就是用来判断mouseover和mouseout事件目标节点的相关节点的属性。简单的.

qiaobb的博客 4002

Docker(八):Docker Compose(容器编排) 管理多容器应用—实战案例演示

🟢 Docker(八):Docker Compose(容器编排) 管理多容器应用—实战案例演示

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6万+

mouseover、mouseout防止多次触发

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34126215的博客 1584

DC/DC开关电源学习笔记(十五)四开关Buck-Boost-FSBB升降压电路拓扑与工作原理

在DCDC领域,最为常见的是buck拓扑,其次是boost拓扑,而buck-boost的关注度相对较低。但是在电池供电场景日益普及的现在,升降压的需求在不断上升,现在更加关注buck-boost这个拓扑。而在所有buck-boost拓扑中,四开关buck-boost最受欢迎。四开关buck-boost的拓扑很简单,如下图。

小幽余生不加糖 6006

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【JavaScript】事件解绑与鼠标事件详解

事件绑定是指将某个函数与 DOM 元素的特定事件进行关联,使得当该事件触发时,会自动调用相应的函数。最常用的事件绑定方法是');});上述代码中,当element被点击时,控制台会输出。mouseover:当鼠标指针移入某个元素或其子元素时触发。mouseout:当鼠标指针移出某个元素或其子元素时触发。这两个事件的一个重要特性是它们会触发事件冒泡,即当鼠标经过或移出某个元素的子元素时,也会触发父元素的相应事件。这有时会导致开发者在实现复杂交互时,出现意料之外的效果。mouseenter。

lph159的博客 1507

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaScript鼠标移动事件

鼠标移动是用户界面中非常重要的交互行为。学习区分不同的鼠标移动事件,可以帮助我们更准确地处理鼠标活动,创建出色的用户体验。本文将详细介绍 mousemove、mouseover/out 以及 mouseenter/leave 事件之间的区别,并通过示例说明在何种场景下使用每个事件。准备好学习后,你将能够自由控制各种鼠标事件。​理解不同鼠标事件的触发规则,可以防止事件混淆,也让我们可以选择最符合需求的事件。

爱蹦跶的全栈大A阿 1684

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

vue 鼠标移入移出事件执行多次(尤其ie)

来自:https://www.cnblogs.com/myfirstboke/p/9150809.html 侵删 <p @mouseover="over($event)" @mouseout="out($event)">互相关注</p> out (t) { t.target.innerText = '互相关注' }, over (t)...

weixin_30947043的博客 776

史上最全的常用事件:移动端事件及PC端:鼠标/键盘/表单事件

PC端事件 鼠标事件: onclick点击 onmouseover鼠标移入 onmouseout鼠标移出 onmousedown鼠标按下 onmouseup鼠标抬起 onmousemove鼠标移动 onmouseenter鼠标移入 onmouseleave鼠标移出 ondblclick鼠标双击 oncontextmenu鼠标右击,为了防止右击div的时候出现重新加载弹框return...

jayccx的专栏 1103

鼠标事件(onmouseover、onmouseout)延时切换插件

原理很简单: onmouseover、onmouseout执行业务代码时使用setTimeout进行延时,第二次触发的时候先清除掉前面的setTimeout。 原理 代码如下: var timer; document.getElementById('test').onmouseover = function () { clearTimeout(t...

aijue2015的博客 497

原生JS自定义鼠标右键菜单

效果: 总体思路: 为document对象绑定右键菜单事件(contextmenu),事件触发后,首先要阻止浏览器的默认行为(浏览器提供的右键菜单)出现。然后把我们自定义的菜单显示在鼠标的当前位置。 利用事件委托为菜单项绑定鼠标移入(mouseover),移出(mouseout),单击(click)事件。 具体实现过程详见代码和注释 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF

weixin_42678796的博客 1351

浏览器:文档,事件和接口(下)

在元素上点击/释放鼠标按钮。鼠标指针从一个元素上移入/移出。mousemove鼠标在元素上的每个移动都会触发此事件。click如果使用的是鼠标左键,则在同一个元素上的mousedown及mouseup相继触发后,触发该事件。dblclick在短时间内双击同一元素后触发。如今已经很少使用了。在鼠标右键被按下时触发。还有其他打开上下文菜单的方式,例如使用特殊的键盘按键,在这种情况下它也会被触发,因此它并不完全是鼠标事件。

boy_girls的博客 223

KnockoutJS 3.X API 第四章 表单绑定(7) event绑定

目的 event绑定即为事件绑定,即当触发相关DOM事件的时候回调函数。例如keypress,mouseover或者mouseout等 例如: Mouse over me Details 源码: <div> <div data-bind="event: { mouseover: enableDetails, mouseout: disableDetails }"...

weixin_30726161的博客 123
上一篇: css3 animation和background-position制作动画效果(animation steps)
下一篇: CSS中如何选择ul下li的奇数、偶数行
阵雨丶
博客等级 码龄9年 126粉丝 52原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值