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

在Chrome和Firefox中停止onmouseenter重复触发

的方法是使用事件委托和事件标志。

事件委托是指将事件绑定到父元素上,然后通过事件冒泡机制来处理子元素的事件。这样可以避免给每个子元素都绑定事件,提高性能。

事件标志是指在事件处理函数中设置一个标志,用于判断是否已经执行过该事件处理函数。当事件触发时,先检查标志,如果已经执行过,则直接返回,不再重复触发。

下面是一个示例代码:

代码语言:txt
复制
<!DOCTYPE html>
<html>
<head>
  <title>Stop onmouseenter from firing repeatedly in Chrome and Firefox</title>
  <style>
    .parent {
      width: 200px;
      height: 200px;
      background-color: lightblue;
    }
    .child {
      width: 100px;
      height: 100px;
      background-color: lightgreen;
    }
  </style>
</head>
<body>
  <div class="parent">
    <div class="child"></div>
  </div>

  <script>
    var parent = document.querySelector('.parent');
    var child = document.querySelector('.child');
    var isMouseEntered = false;

    parent.addEventListener('mouseenter', function() {
      if (isMouseEntered) {
        return;
      }
      console.log('Mouse entered parent');
      isMouseEntered = true;
    });

    parent.addEventListener('mouseleave', function() {
      console.log('Mouse left parent');
      isMouseEntered = false;
    });

    child.addEventListener('mouseenter', function() {
      console.log('Mouse entered child');
    });

    child.addEventListener('mouseleave', function() {
      console.log('Mouse left child');
    });
  </script>
</body>
</html>

在上面的代码中,我们使用了一个布尔型变量isMouseEntered来标志鼠标是否已经进入了父元素。在父元素的mouseenter事件处理函数中,我们首先检查isMouseEntered的值,如果为true,则直接返回,不再重复触发。在父元素的mouseleave事件处理函数中,我们将isMouseEntered的值设为false,表示鼠标已经离开了父元素。

这样,在Chrome和Firefox中,当鼠标进入父元素时,只会触发一次mouseenter事件,而不会重复触发。

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

相关·内容

DOM、BOM一些兼容性问题

汇集了许多关于DOM和BOM的兼容性问题,主要是关于 IE 浏览器的,考虑到浏览器迭代,这里主要列出了 IE8 以及之后的浏览器版本。 IE8 浏览器在 2008年推出,距现在(2019)已有11年之久,已经是很老的一款浏览器了。但是在一些项目中,可能仍需要考虑到兼容性,如果兼容到 IE8 已经是很兼容了,毕竟该浏览器也几乎没多少市场份额了。多是一些机构或政府部门在使用。而有些兼容性问题也可能是其它浏览器之间的差异,比如 Chrome 和 FireFox 对于鼠标滚轮事件对象的滚轮方向判断方式不同,Chrome使用 wheelDelta,而FireFox 则采用 detail 做判断。下面将一一说明或做补充实现来尽量弥补浏览器之间的差异。其实大部分就是为了兼容 IE 早期浏览器。

02
领券