对mouseenter和mouseover这两个事件,以前都是在用到的时候,去试试,哪个这个不行,换另外一个,哪个满足要求用哪个,没去具体试过两者之间的区别,今天测试了一下,做如下记录
<div id="blue" class="blue"> <div id="green" class="green"></div> </div>
<style> .blue{ height: 100px; width: 100px; border: 1px solid blue; } .green{ height: 80px; width: 80px; border: 1px solid green; } </style>
在浏览器中看到的是这样的
var blue = document.getElementById('blue'), green = document.getElementById('green'); blue.addEventListener('mouseenter', callback); green.addEventListener('mouseenter', callback); function callback (event) { console.log(event.target.getAttribute('id')); console.log(this.getAttribute('id')); console.log(event.type); }
加上事件绑定后,当鼠标移入蓝框,未进入绿框时,触发蓝框的mouseenter事件,输出
blue
blue
mouseenter
继续移入绿框,触发绿框mouseeneter事件,输出
green
green
mouseenter
再从绿框移出进入蓝框时,没有反应
现在换成mouseover事件看看,
进入蓝框时输出
blue
blue
mouseover
继续移入绿框,触发绿框mouseover事件,输出
green
green
mouseover
green
blue
mouseover
看到不仅触发绿框, 还冒泡触发了蓝框的mouseover事件,
当鼠标从绿框进入蓝框时,又触发蓝框的mouseover事件
blue
blue
mouseover
可以看到,鼠标进入子元素时,会触发子元素的mouseover,mouseenter事件,同时冒泡触发父元素的mouseover事件,但是不会冒泡触发父元素的mouseenter事件
接下来给绿框加上 margin-left: 130px;
这是两框位置如下
看到绿框已经到蓝框外面了,此时再看看事件的触发,
鼠标移入绿框
输出
green
green
mouseenter
blue
blue
mouseenter
可以看看不仅触发了绿框的mouseenter事件,外层蓝框的mouseenter事件也触发了,但是细看看,这好像不是通过冒泡来触发外层蓝框的mouseenter的。因为在蓝框的mouseenter回调函数中target和this都是外层蓝框。在callback函数中加上event.stopPropagation(),企图阻止冒泡,希望不要触发蓝框的mouseenter,发现并不管用,所以蓝框的mouseenter事件的触发并不是冒泡。
发现内部的div和外部div的相对位置对mouseenter事件的触发是有影响的
将mouseenter换成mouseover试试
输出
green
green
mouseover
green
blue
mouseover
看到内外部div的mouseover事件都触发了,而且外部div的mouseover事件是由于事件冒泡引起的。
给callback加上event.stopPropagation()后再试,
发现只输出
green
green
mouseover
并没有触发外层div的mouseover事件。
如果绿框的margin为70px,在浏览器中位置如下
鼠标从右往左先进入绿框,触发绿框的mouseenter事件,蓝框的mouseenter事件,鼠标继续左移进入交界以及完全进入蓝框,都不会再触发mouseenter事件。
此时再向右移进入两框交界的地方,会触发绿框的mouseenter事件,继续右移将不会触发事件
如果是mouseover事件,又会不一样。
鼠标从右往左移,进入绿框,触发绿框和蓝框的mouseover事件,继续左移,进入交界处不会触发事件,但是当完全进入蓝框将触发蓝框mouseover事件,因为在完全进入蓝框之前,鼠标一直over在绿框上,没有over在蓝框之上。
此时反向向右移,进入交界处触发绿框和蓝框的mouseover事件,继续右移,不再触发事件
总结:
鼠标进入子元素,触发子元素的mouseenter,此时是否触发父元素的mouseenter事件,取决于此时鼠标是否在父元素的范围内,而且触发父元素的mouseenter事件,不是冒泡,所以无法使用stopPropagation
鼠标进入子元素,触发子元素的mouseover事件,此时将会触发父元素的mouseover事件。如果愿意可以通过stopPropagation阻止冒泡。
mouseenter对应的mouseleave
mouseover对应的mouseout效果差不多,不作叙述
相关推荐
08-mouseenter和mouseover的区别.html
javascript中mouseover和mouseenter的区别主要在于监听对象的子元素是否触发事件。mouseover:鼠标移入监听对象中,或者从监听对象的一个子元素移入另一个子元素中时触发该事件。mouseenter:鼠标移入监听对象时触发...
为了更好地理解这个特效,可以打开名为"texiao8741_1560936070"的压缩包文件,其中可能包含HTML、CSS和JavaScript代码,通过查看和运行这些代码,我们可以深入学习并理解Mouseenter事件在实际项目中的应用。...
`mouseenter`和`mouseleave`事件与`mouseover`和`mouseout`类似,但有一些关键的区别。`mouseover`和`mouseout`在鼠标进入或离开元素及其子元素时都会触发,而`mouseenter`和`mouseleave`只在鼠标进入或离开元素本身...
这两个事件是DOM级别的,与`mouseover`和`mouseout`不同,它们不会因为子元素的存在而被错误触发。当鼠标进入一个元素或离开一个元素时,这两个事件会被精确地触发。 要判断鼠标进入元素的方向,我们通常需要记录...
总结来说,当面临因嵌套元素导致的 `mouseover` 和 `mouseout` 事件频繁触发的问题时,可以考虑使用jQuery的 `mouseenter` 和 `mouseleave` 或 `hover()` 方法来优化代码,提高用户体验。同时,为了确保在边界情况下...
总之,`mouseenter`的非IE实现主要依赖于对`mouseover`事件的监听和正确处理事件冒泡。通过这种方式,开发者可以在不支持`mouseenter`的浏览器中提供一致的用户体验。同时,了解和使用像Ext JS这样的库,可以简化这...
在JavaScript和jQuery中,`mouseover` 和 `mouseenter` 都是处理鼠标悬停事件的常见方法,但它们之间存在微妙的差异,这些差异在某些情况下可能会对代码的行为产生重要影响。 `mouseover` 事件会在鼠标指针进入元素...
在Vue.js中,开发者经常利用`v-for`指令来遍历数据并生成多个元素,同时结合事件监听器如`@mouseenter`和`@mouseleave`来实现交互效果。然而,在循环中使用这些事件处理函数可能会遇到一些问题,比如闪烁现象。本文...
`mouseover`, `mouseout`, `mouseenter`, 和 `mouseleave` 是四个常见的鼠标事件,它们都与鼠标的移动有关,但触发条件有所不同。理解这些事件的区别对于编写无闪烁、响应良好的用户界面至关重要。 1. `mouseover` ...
3. mouseenter和mouseleave事件:与mouseover和mouseout不同,mouseenter和mouseleave事件不会在事件冒泡阶段触发。这意味着,只有当鼠标指针实际进入或离开被选元素本身时,这些事件才会被触发,从而避免了因子元素...
标题提到的问题是,当鼠标经过子元素时,意外触发了父元素的`mouseout`和`mouseover`事件,从而影响了预期的效果。下面将详细讨论这个问题以及解决方案。 首先,我们需要了解`mouseover`和`mouseout`事件的工作原理...
1. 使用mouseenter和mouseleave事件替代mouseover和mouseout。这些事件由IE浏览器首先提出,而后被最新版本的其他主流浏览器支持。mouseenter事件只在鼠标指针进入元素内部时触发一次,而mouseleave事件则在鼠标指针...
在JavaScript的事件处理中,`mouseenter` 和 `mouseleave` 是两个非常实用的事件,它们提供了比 `mouseover` 和 `mouseout` 更精确的交互控制。本文将深入探讨这两个事件的特性和区别,以及如何使用 `...
`mouseenter`和`mouseover`事件的区别在于,`mouseenter`事件不会在事件源元素的子元素之间移动时触发,而`mouseover`则会在任何鼠标移动到该元素的子元素时触发。这意味着`mouseenter`只在鼠标首次进入元素时触发一...
在本文中,我们将深入探讨`mouseout`和`mouseover`事件以及它们与事件冒泡相关的常见问题,同时提供一种有效的解决方案。 `mouseout`和`mouseover`事件是两种常用的DOM(文档对象模型)事件,用于追踪用户鼠标在...