首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我将鼠标焦点放在元素上时,mouseenter和mouseleave会一直触发

mouseentermouseleave 事件会在鼠标指针进入和离开元素及其子元素时触发

你可以尝试以下方法来解决这个问题:

  1. 使用 mouseovermouseout 事件替代 mouseentermouseleave。这两个事件会在鼠标指针进入和离开元素及其子元素时触发,但它们不会在子元素间移动时触发。
代码语言:javascript
复制
const element = document.querySelector('#your-element');

element.addEventListener('mouseover', () => {
  console.log('Mouse over');
});

element.addEventListener('mouseout', () => {
  console.log('Mouse out');
});
  1. 使用 pointerenterpointerleave 事件。这两个事件是针对指针设备的,它们与 mouseentermouseleave 类似,但它们不会在子元素间移动时触发。
代码语言:javascript
复制
const element = document.querySelector('#your-element');

element.addEventListener('pointerenter', () => {
  console.log('Pointer enter');
});

element.addEventListener('pointerleave', () => {
  console.log('Pointer leave');
});
  1. 如果你希望事件只在子元素之间移动时不触发,可以使用一个变量来跟踪鼠标是否真正离开了元素。例如:
代码语言:javascript
复制
const element = document.querySelector('#your-element');
let isMouseInside = false;

element.addEventListener('mouseenter', () => {
  isMouseInside = true;
  console.log('Mouse enter');
});

element.addEventListener('mouseleave', () => {
  isMouseInside = false;
  console.log('Mouse leave');
});

element.addEventListener('mousemove', (event) => {
  if (isMouseInside && event.target !== element) {
    isMouseInside = false;
    console.log('Mouse left the element');
  } else if (!isMouseInside && event.target === element) {
    isMouseInside = true;
    console.log('Mouse entered the element');
  }
});

这段代码会在鼠标进入和离开元素时触发 mouseentermouseleave 事件,同时还会在鼠标在子元素间移动时更新 isMouseInside 变量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ReactPortals传送门

事件将被触发,而当我们再将鼠标移动到b元素时,不会再次触发MouseEnter事件。...事件将被触发,而当我们再将鼠标移动到b元素时,由于冒泡会再次触发绑定在a元素上的MouseOver事件,再从b元素移出到a元素时会再次触发MouseOver事件。...事件也是同样会多次触发,可以将父元素与所有子元素都看作独立区域,而事件会冒泡到父元素来执行事件绑定函数,这可能导致重复的事件处理和不必要的逻辑触发,而MouseEnter和MouseLeave事件不会重复触发...MouseEnter事件,当我们鼠标移动到a上时,会执行a元素绑定的事件,当依次将鼠标移动到a、b、c的时候,同样会以此执行a、b、c的事件绑定函数,并且不会因为冒泡事件导致父元素事件的触发,当我们鼠标直接移动到...元素时,d元素会被展示出来,当我们继续将鼠标快速移动到d元素时,所有的弹出层都不会消失,当我们直接将鼠标从d元素移动到空白区域时,所有的弹出层都会消失,如果我们将其移动到b元素,那么只有d元素会消失。

26750

4-Jquery学习四-事件操作

使用该函数可以手动触发执行元素上绑定的事件处理函数,也会触发执行该元素的默认行为。...focusin事件绑定处理函数(可以绑定多个,触发时按照绑定顺序依次执行): focusin是支持冒泡的,当我们把鼠标光标放入文本框时,该事件冒泡传递到父元素p上,因此可以在p元素上触发focusin事件...对于text和textarea元素,该事件会在元素失去焦点时发生(文本内容也发生了更改)。...31,mouseenter 32,mouseover mouseenter事件会在鼠标进入某个元素时触发。...它与mouseleave事件相似,但mouseleave事件只会在鼠标离开当前元素时触发,而mouseout事件会在鼠标离开当前元素及其任何后代元素时触发(换句话说,mouseout事件支持冒泡)。

4.5K90
  • JavaScript鼠标事件细讲:执行顺序+注意事项+区别比对

    当用户的焦点在按钮上并按了 Enter 键时,同样会触发这个事dblclick:双击鼠标左键时发生,如果右键也按下则不会发生contextmenu :弹出右键菜单。...与 click 不同,只要鼠标在元素上松开即触发(左右键都行)。mousedown:鼠标在元素上并按下时触发 mousedown 事件。与 click 不同,只要鼠标在元素上按下即触发(左右键都行)。...mouseover:当鼠标位于元素上时触发 mouseover 事件,通常与 mouseout 配合使用。...mouseenter:当鼠标位于元素上时触发 mouseenter 事件,通常与 mouseleave 配合使用。mousemove:鼠标在元素上移动时触发 moudemove 事件。...mouseout:鼠标在元素上移开时触发 mouseout 事件。mouseleave:鼠标在元素上移开时触发 mouseleave 事件。

    3.9K21

    JQuery之内置函数响应事件

    2.mouseenter  当鼠标指针穿过元素时,会发生 mouseenter 事件。该事件大多数时候会与mouseleave 事件一起使用。...与 mouseover 事件不同,只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。如果鼠标指针穿过任何子元素,同样会触发 mouseover 事件。...3.mouseleave  当鼠标指针离开元素时,会发生 mouseleave 事件。该事件大多数时候会与mouseenter 事件一起使用。...与 mouseout 事件不同,只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。如果鼠标指针离开任何子元素,同样会触发 mouseout 事件。...提示:如果把 dblclick 和 click 事件应用于同一元素,可能会产生问题。 三:input事件 1.获得焦点focus :当元素获得焦点时,触发 focus 事件。

    2.1K60

    jquery 绑定事件 - mouseover() mouseout() mouseenter() mouseleave() hover()

    事件函数列表 blur() 元素失去焦点 focus() 元素获得焦点 click() 鼠标单击 mouseover() 鼠标进入(进入子元素也触发) mouseout() 鼠标离开(离开子元素也触发)...mouseenter() 鼠标进入(进入子元素不触发) mouseleave() 鼠标离开(离开子元素不触发) hover() 同时为mouseenter和mouseleave事件指定处理函数 ready...这样就像是类似事件冒泡,不过是子元素将mouseover()传递冒泡给父元素,就算子元素没在#big里面,也会触发这个事件。...果然,这个子元素也是会触发mouseout()事件的。 mouseenter() 鼠标进入(进入子元素不触发) 上面两个事件都是具备事件冒泡的特性,看看这个有没有,如下: ? ?...hover() 同时为mouseenter和mouseleave事件指定处理函数 这个hover()方法其实就是mouseenter()和mouseleave()的合并方法,如下: ? ?

    3K30

    JQ事件和事件对象

    () 鼠标按下和松开事件    5 mouseover()/mouseout() 鼠标移入和移出事件   6 mouseenter()/mouseleave() 鼠标移入移出事件   //mouseover...()/mouseout()和mouseenter()/mouseleave()的区别    首先来了解一下事件冒泡和捕获     事件冒泡:内部事件先触发,然后在触发外部事件     事件捕获:外部事件先被触发...,然后在触发内部元素     mouseover()/mouseout() :鼠标移入“所选元素以及后代都会触发”     mouseenter()/mouseleave():鼠标移入“所选元素”才会触发...    2  blur(): 失去焦点事件     3 focusin()  :获得焦点事件     4 focusout() :失去焦点事件     5 change()  :元素发生改变时,触发事件...可以在父元素上检测子元素获得焦点的情况 而focusout可以在父元素上检测子元素失去焦点情况  四 其他事件   1 scroll()滚动滚动条时触发的事件      2  resize()当调整窗口大小时触发的事件

    4.1K20

    jquery 绑定事件 - blur() 失去焦点 - focus() 获取焦点

    事件函数列表 blur() 元素失去焦点 focus() 元素获得焦点 click() 鼠标单击 mouseover() 鼠标进入(进入子元素也触发) mouseout() 鼠标离开(离开子元素也触发)...mouseenter() 鼠标进入(进入子元素不触发) mouseleave() 鼠标离开(离开子元素不触发) hover() 同时为mouseenter和mouseleave事件指定处理函数 ready...() DOM加载完成 resize() 浏览器窗口的大小发生改变 scroll() 滚动条的位置发生变化 submit() 用户递交表单 编写一个form表单,用来演示输入框获取焦点和失去焦点的示例 ?...其实通过focus()函数只是简单用来初始化文本框的焦点输入的而已,如下: ? 当刚进入页面,文本框就自动获取焦点,这基本上就是这个方法的大部分用法了。...blur() 元素失去焦点 使用blur()失去焦点这个方法一般会结合获取文本框内容的函数一起使用,如下: ? 当获取到文本框内的值之后,就可以对其进行正则验证或者其他方式的校验。

    12.4K30

    事件类型之鼠标事件

    click:按下鼠标时触发。 dblclick:在同一个元素上双击鼠标时触发。 mousedown:按下鼠标键时触发。 mouseup:释放按下的鼠标键时触发。...mousemove:当鼠标在一个节点内部移动时触发。当鼠标持续移动时,该事件会连续触发。为了避免性能问题,建议对该事件的监听函数做一些限定,比如限定一段时间内只能运行一次。...mouseenter:鼠标进入一个节点时触发,进入子节点不会触发这个事件 mouseover:鼠标进入一个节点时触发,进入子节点会再一次触发这个事件 mouseout:鼠标离开一个节点时触发,离开父节点也会触发这个事件...mouseleave:鼠标离开一个节点时触发,离开父节点不会触发这个事件 wheel:滚动鼠标的滚轮时触发 事件注意事项 click事件指的是,用户在同一个位置先完成mousedown动作,再完成...mouseover事件和mouseenter事件,都是鼠标进入一个节点时触发。两者的区别是,mouseenter事件只触发一次,而只要鼠标在节点内部移动,mouseover事件会在子节点上触发多次。

    2.5K30

    JQuery几个mouse事件的区别和用法

    mousedown:鼠标在元素上并按下时触发 mousedown 事件。与 click 不同,只要鼠标在元素上按下即触发。...mouseenter:当鼠标位于元素上时触发 mouseenter 事件,通常与 mouseleave 配合使用。 mousemove:鼠标在元素上移动时触发 moudemove 事件。...mouseout:鼠标在元素上移开时触发 mouseout 事件。 mouseleave:鼠标在元素上移开时触发 mouseleave 事件。...mouseover 和 mouseout 鼠标划入子元素,再次划入父元素时即再次触发,如果该元素包含子元素,鼠标在上面划动时即会触发多次。...打印结果如下图, mouseover 和 mouseout 在包含子元素的情况下会多次触发,mouseover 即使不包含子元素也会不断触发,mouseenter 在鼠标划入时触发一次,mouseleave

    2.8K00

    javascript 事件基础

    三、事件对象 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息;包括导致事件的元素,事件的类型以及其他与特定事件相关的信息。...事件:鼠标指针在元素外部,用户将移入另一个元素的边界时触发,感觉和mouseenter事件类似; mouseout事件:用户将其移入另一个元素内被触发。...mouseenter事件:在鼠标光标从元素外部移动到元素范围之内被触发;这个事件不冒泡; mouseleave事件:在鼠标光标从元素内部移动到元素范围之外被触发;这个事件不冒泡; mousemove事件...mouseup事件:用户释放鼠标按钮时触发; 页面上所有的元素都支持鼠标事件,除了mouseenter和mouseleave,所有鼠标事件都会冒泡,也可以被取消,而取消鼠标事件将会影响浏览器的默认行为...4.2焦点事件:当元素获得或失去焦点时触发;   blur:在元素失去焦点时触发,这个事件不会冒泡,所有浏览器都支持。

    95150

    jquery 绑定事件 - resize() 浏览器窗口的大小发生改变

    事件函数列表 blur() 元素失去焦点 focus() 元素获得焦点 click() 鼠标单击 mouseover() 鼠标进入(进入子元素也触发) mouseout() 鼠标离开(离开子元素也触发)...mouseenter() 鼠标进入(进入子元素不触发) mouseleave() 鼠标离开(离开子元素不触发) hover() 同时为mouseenter和mouseleave事件指定处理函数 ready...浏览器窗口的大小发生改变 scroll() 滚动条的位置发生变化 submit() 用户递交表单 resize() 浏览器窗口的大小发生改变 其实大部分resize()方法是用于响应式布局调整屏幕大小的时候进行触发处理的...这里就不写那么复杂的事情,只写一下当浏览器窗口变化的时候,触发resize()事件看看。

    2.5K20

    jquery 绑定事件 - submit() 用户递交表单

    事件函数列表 blur() 元素失去焦点 focus() 元素获得焦点 click() 鼠标单击 mouseover() 鼠标进入(进入子元素也触发) mouseout() 鼠标离开(离开子元素也触发)...mouseenter() 鼠标进入(进入子元素不触发) mouseleave() 鼠标离开(离开子元素不触发) hover() 同时为mouseenter和mouseleave事件指定处理函数 ready...为什么需要触发这个submit()事件呢?...原因就是很多时候表单的提交并不能使用原生的submit按钮直接提交表单,而是需要触发一个事件,在这个事件处理验证完毕数据,最后在使用ajax进行异步提交处理较好。...禁用原生的submit事件 注意:该事件只适用于 元素。 submit() 方法触发 submit 事件,或规定当发生 submit 事件时运行的函数。 ?

    2.2K30

    梳理下常见的不冒泡事件

    User shifts focus focusout 第一个目标元素失去焦点之前触发 focusin 第二个目标元素获得焦点之前触发 blur 第一个目标元素失去焦点之后触发 focus 第二个元素获得焦点之后触发...•blur 不冒泡 ❌•focus 不冒泡 ❌•focusin•focusout 要注意 blur 事件和 focus 事件都是不冒泡的,因获取和失去焦点本身就是针对这个元素的。...如果要坚挺具体的焦点变化情况,那么应该使用 focusin 和 focusout Mouse 事件 如果元素内部没有嵌套另一个元素,事件触发的顺序见下表: Event Type Element Notes...直接移动到元素C,常见于失去焦点再获得焦点的情况,事件触发顺序见下表: Event Type Element Notes mousemove 直接移动到元素C mouseover C mouseenter...可以看到 mouseover/mouseout 事件只触发一次,mouseenter/mouseleave 事件触发了三次 然后再看下 click 元素 |Event Type|Notes| |--|-

    1.3K30

    JQery事件

    这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情 前言 今天记录一下JQery事件,其中包括五部分 鼠标事件 click: 鼠标单击时触发; dblclick:鼠标双击时触发...; mouseenter:鼠标进入时触发; mouseleave:鼠标移出时触发; mousemove:鼠标在DOM内部移动时触发; hover:鼠标进入和退出时触发两个函数,相当于mouseenter...加上mouseleave。...键盘事件 键盘事件仅作用在当前焦点的DOM上,通常是和。 keydown:键盘按下时触发; keyup:键盘松开时触发; keypress:按一次键后触发。...其他事件 focus:当DOM获得焦点时触发; blur:当DOM失去焦点时触发; change:当、或的内容改变时触发; submit:当

    44110

    zepto 事件分析3(add函数)

    先来看一下函数里面的条件判定: hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' } if (handler.e in hover) fn... 我们对div.out定义mouseenter事件后,当我们鼠标从div.in移出来,但鼠标仍然在div.out...,那么鼠标自始至终都在div.out中,但还是触发了mouseenter事件,这可能与预期中不同,所以zepto在这里加了判断,如果relatedTarget元素不存在,或者relatedTarget元素不是我们想要触发的元素本身...3.事件绑定,当存在selector触发时,实际触发的是$对象中的dom元素,只是通过事件委托使得像在符合selector条件元素中执行一样。...ps:当存在selector时,假设绑定了click事件,但点击的是$对象中的dom元素并且区域不在selector中,同样触发了事件对象,只是上一篇中的delegator函数里,如果找不到selector

    52530

    面试官:mouseenter与mouseover有何异同?怎么模拟mouseenter?

    大概意思是说:当鼠标从元素的边界之外移入元素的边界之内时,事件被触发。而当鼠标本身在元素边界内时,要触发该事件,必须先将鼠标移出元素边界外,再次移入才能触发。...大概意思是:和mouseover不同的是,mouseenter不支持事件冒泡 (英语比较渣,凑合看哈) 由于mouseenter不支持事件冒泡,导致在一个元素的子元素上进入或离开的时候会触发其mouseover...和mouseout事件,但是却不会触发mouseenter和mouseleave事件 我们用一张动图来看看他们的区别(或者点击该链接体验)。...我们给左右两边的ul分别添加了mouseover和mouseenter事件,当鼠标进入左右两边的ul时,mouseover和mouseenter事件都触发了,但是当移入各自的子元素li的时候,触发了左边...用mouseout模拟mouseleave事件 当mouseout被激活时,relatedTarget表示鼠标离开目标元素时,进入了哪个元素,我们同样可以对relatedTarget的值进行判断:如果值不是目标元素

    1.1K30
    领券