Это связано с тем, как работает перехват и всплытие событий.Я скопировал ответ @ACD, чтобы убедиться, что он ведет себя по-другому.Если вы заметили, что мы наведем курсор на дочерний элемент и переместимся к родительскому элементу, событие в этом примере не вызывается.Таким образом, дочерние элементы больше не являются целью события.
Существует две фазы события: ловля и выдувание.Вы можете найти больше информации здесь .То, что происходит, это событие запускается для ребенка, и оно пузырится на родителя.Вы можете проверить цель события с помощью event.target
. Если мы удалим pointer-events: none;
, то целью будет дочерний элемент, а не родитель.и после того, как дочерний обработчик вызван, вентиляция передается родителю, а затем вызывается обратный вызов родителей.
const parent = document.getElementsByClassName('parent')[0]
parent.addEventListener('mouseover', eventHandler)
parent.addEventListener('mouseleave', eventHandler)
function eventHandler(e) {
console.log(e.target, 'hey');
}
<div class="parent" style="width: 25px; height: 25px; background: red; padding: 50px">
<div class="child-1" style="pointer-events: none; width: 25px; height: 25px; background: blue"></div>
<div class="child-2" style="pointer-events: none; width: 25px; height: 25px; background: green"></div>
</div>