mouseover和mouseenter事件有什么区别?

148 javascript jquery events javascript-events

我一直使用这个mouseover事件,但在阅读我发现的jQuery文档时mouseenter.它们似乎完全相同.

这两者之间是否存在差异?如果是,我应该何时使用它们?
(也适用于mouseoutvs mouseleave).

Kei*_*rup 115

您可以从jQuery文档页面尝试以下示例.这是一个很好的小型互动演示,它非常清晰,你可以亲自看看.

var i = 0;
$("div.overout")
  .mouseover(function() {
    i += 1;
    $(this).find("span").text("mouse over x " + i);
  })
  .mouseout(function() {
    $(this).find("span").text("mouse out ");
  });

var n = 0;
$("div.enterleave")
  .mouseenter(function() {
    n += 1;
    $(this).find("span").text("mouse enter x " + n);
  })
  .mouseleave(function() {
    $(this).find("span").text("mouse leave");
  });
Run Code Online (Sandbox Code Playgroud)
div.out {
  width: 40%;
  height: 120px;
  margin: 0 15px;
  background-color: #d6edfc;
  float: left;
}

div.in {
  width: 60%;
  height: 60%;
  background-color: #fc0;
  margin: 10px auto;
}

p {
  line-height: 1em;
  margin: 0;
  padding: 0;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="out overout">
  <span>move your mouse</span>
  <div class="in">
  </div>
</div>

<div class="out enterleave">
  <span>move your mouse</span>
  <div class="in">
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

简而言之,您会注意到当一个元素在它上面时会发生一个鼠标悬停事件 - 来自它的子OR或父元素,但只有当鼠标从该元素外部移动到该元素时才会发生鼠标输入事件.

或者正如mouseover()文档所说:

.mouseover()由于事件冒泡,[ ]会引起很多麻烦.例如,当鼠标指针在此示例中移动到Inner元素上时,鼠标悬停事件将被发送到该元素,然后逐渐渗透到外部.这可以在不合适的时间触发我们的绑定鼠标悬停处理程序.请参阅讨论以.mouseenter()获取有用的替代方案.

  • 当鼠标从父元素移动到元素时,"mouseenter`"才会出现.当鼠标从**元素变为**元素内部时,会发生该事件.鼠标来自哪个元素并不重要.确实,鼠标通常来自父母,但并非总是如此.例如,如果父母没有填充或边框,那么鼠标可以直接从祖父母进入,并且"mouseenter"仍将触发.实际上,它甚至可以从视口外部输入元素(如果元素位于边缘)并且事件仍然会触发. (37认同)
  • DEMO是最好的解释;) (2认同)

Jos*_*eph 42

的MouseEnter和鼠标离开应对事件冒泡,而鼠标悬停及移出.

这是一篇描述行为的文章.

  • 这完美地解释了它:http://bl.ocks.org/mbostock/5247027 mouseover每次从容器中触发时都会触发,因为事件冒泡. (5认同)