`
leeqq
  • 浏览: 138602 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

mouseenter和mouseover小记

    博客分类:
  • web
阅读更多

对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效果差不多,不作叙述

  • 大小: 494 Bytes
  • 大小: 516 Bytes
  • 大小: 501 Bytes
分享到:
评论

相关推荐

    08-mouseenter和mouseover的区别.html

    08-mouseenter和mouseover的区别.html

    javascript中mouseenter与mouseover的异同

    javascript中mouseover和mouseenter的区别主要在于监听对象的子元素是否触发事件。mouseover:鼠标移入监听对象中,或者从监听对象的一个子元素移入另一个子元素中时触发该事件。mouseenter:鼠标移入监听对象时触发...

    一个不错的Mouseenter事件网页特效

    为了更好地理解这个特效,可以打开名为"texiao8741_1560936070"的压缩包文件,其中可能包含HTML、CSS和JavaScript代码,通过查看和运行这些代码,我们可以深入学习并理解Mouseenter事件在实际项目中的应用。...

    为非IE浏览器添加mouseenter,mouseleave事件

    `mouseenter`和`mouseleave`事件与`mouseover`和`mouseout`类似,但有一些关键的区别。`mouseover`和`mouseout`在鼠标进入或离开元素及其子元素时都会触发,而`mouseenter`和`mouseleave`只在鼠标进入或离开元素本身...

    判断mouseenter事件鼠标从哪个方向进入

    这两个事件是DOM级别的,与`mouseover`和`mouseout`不同,它们不会因为子元素的存在而被错误触发。当鼠标进入一个元素或离开一个元素时,这两个事件会被精确地触发。 要判断鼠标进入元素的方向,我们通常需要记录...

    经过绑定元素时会多次触发mouseover和mouseout事件

    总结来说,当面临因嵌套元素导致的 `mouseover` 和 `mouseout` 事件频繁触发的问题时,可以考虑使用jQuery的 `mouseenter` 和 `mouseleave` 或 `hover()` 方法来优化代码,提高用户体验。同时,为了确保在边界情况下...

    mouseenter 的非 IE 实现

    总之,`mouseenter`的非IE实现主要依赖于对`mouseover`事件的监听和正确处理事件冒泡。通过这种方式,开发者可以在不支持`mouseenter`的浏览器中提供一致的用户体验。同时,了解和使用像Ext JS这样的库,可以简化这...

    浅谈JQ中mouseover和mouseenter的区别

    在JavaScript和jQuery中,`mouseover` 和 `mouseenter` 都是处理鼠标悬停事件的常见方法,但它们之间存在微妙的差异,这些差异在某些情况下可能会对代码的行为产生重要影响。 `mouseover` 事件会在鼠标指针进入元素...

    详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法

    在Vue.js中,开发者经常利用`v-for`指令来遍历数据并生成多个元素,同时结合事件监听器如`@mouseenter`和`@mouseleave`来实现交互效果。然而,在循环中使用这些事件处理函数可能会遇到一些问题,比如闪烁现象。本文...

    关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别

    `mouseover`, `mouseout`, `mouseenter`, 和 `mouseleave` 是四个常见的鼠标事件,它们都与鼠标的移动有关,但触发条件有所不同。理解这些事件的区别对于编写无闪烁、响应良好的用户界面至关重要。 1. `mouseover` ...

    JS中mouseover和mouseout多次触发问题如何解决

    3. mouseenter和mouseleave事件:与mouseover和mouseout不同,mouseenter和mouseleave事件不会在事件冒泡阶段触发。这意味着,只有当鼠标指针实际进入或离开被选元素本身时,这些事件才会被触发,从而避免了因子元素...

    鼠标经过子元素触发mouseout,mouseover事件的解决方案

    标题提到的问题是,当鼠标经过子元素时,意外触发了父元素的`mouseout`和`mouseover`事件,从而影响了预期的效果。下面将详细讨论这个问题以及解决方案。 首先,我们需要了解`mouseover`和`mouseout`事件的工作原理...

    javascript中mouseover、mouseout使用详解

    1. 使用mouseenter和mouseleave事件替代mouseover和mouseout。这些事件由IE浏览器首先提出,而后被最新版本的其他主流浏览器支持。mouseenter事件只在鼠标指针进入元素内部时触发一次,而mouseleave事件则在鼠标指针...

    跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明

    在JavaScript的事件处理中,`mouseenter` 和 `mouseleave` 是两个非常实用的事件,它们提供了比 `mouseover` 和 `mouseout` 更精确的交互控制。本文将深入探讨这两个事件的特性和区别,以及如何使用 `...

    为非IE浏览器添加mouseenter,mouseleave事件的实现代码

    `mouseenter`和`mouseover`事件的区别在于,`mouseenter`事件不会在事件源元素的子元素之间移动时触发,而`mouseover`则会在任何鼠标移动到该元素的子元素时触发。这意味着`mouseenter`只在鼠标首次进入元素时触发一...

    基于mouseout和mouseover等类似事件的冒泡问题解决方法

    在本文中,我们将深入探讨`mouseout`和`mouseover`事件以及它们与事件冒泡相关的常见问题,同时提供一种有效的解决方案。 `mouseout`和`mouseover`事件是两种常用的DOM(文档对象模型)事件,用于追踪用户鼠标在...

Global site tag (gtag.js) - Google Analytics