MouseLeave表现得像MouseOut



我觉得自己快要疯了。。。因此,根据我的理解和互联网上的普遍共识,mouseout在光标上触发,留下一个元素或它的任何子元素,而mouseleave只在光标上激发,留下事件所附的元素

<html>
<body>
<div id='test'>
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul>
</div>
<script>
const div = document.getElementById('test');
div.addEventListener('mouseleave', (e) => console.log('out'), true);
</script>
</body>
</html>

当鼠标离开该div的任何后代时,mouseleave事件肯定仍在启动。我觉得我一定做错了什么,但是。。。什么

尝试从addEventListener中删除最后一个参数-它被称为useCapture,默认情况下是false。如果您传递true,则事件将在捕获阶段激发,这将导致在每个子元素上激发mouseleave。阅读有关useCapture参数的更多信息-https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

mouseleave事件不会冒泡,因为它在离开子元素时不会触发父事件。但当您通过useCapture时,您会强制事件在捕获阶段启动。MDN上的事件阶段-https://developer.mozilla.org/ru/docs/Web/API/Event/eventPhase

const div = document.getElementById('test');
div.addEventListener('mouseleave', (e) => console.log('out')); // Remove `true`
<html>
<body>
<div id='test'>
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul>
</div>
</body>
</html>

最新更新