Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: event, dom

В чем разница между событиями mouseleave и mouseout в JavaScript?

Этот вопрос проверяет знание различий между похожими событиями mouseleave и mouseout, которые часто используются для работы с курсором мыши на веб-странице.

Короткий ответ

Событие mouseleave срабатывает, когда курсор мыши уходит за пределы элемента, включая все его дочерние элементы. Событие mouseout, в свою очередь, срабатывает, когда курсор покидает элемент или его дочерний элемент. Таким образом, mouseout может сработать несколько раз внутри одного элемента при переходе между дочерними элементами.

Длинный ответ

События mouseleave и mouseout в JavaScript связаны с движением курсора мыши, но имеют разные триггеры.

mouseleave:
Это событие срабатывает, когда курсор уходит за пределы элемента и всех его дочерних элементов. Оно не срабатывает, если курсор перемещается между дочерними элементами:

element.addEventListener('mouseleave', () => {
	console.log('Курсор покинул элемент'); 
});

mouseout:
Это событие срабатывает, когда курсор покидает элемент или любой из его дочерних элементов. Поэтому, если курсор перемещается между дочерними элементами, mouseout будет срабатывать каждый раз:

element.addEventListener('mouseout', () => {
	console.log('Курсор покинул элемент или его дочерний элемент'); 
});

Пример различия:

<div id="parent" style="width:200px; height:200px; background-color:lightblue;">
	<div id="child" style="width:100px; height:100px; background-color:lightgreen;"></div> 
</div> 
<script>
	const parent = document.getElementById('parent');  
	parent.addEventListener('mouseleave', () => console.log('mouseleave на родителе'));  
	parent.addEventListener('mouseout', () => console.log('mouseout на родителе'));  
	const child = document.getElementById('child');  
	child.addEventListener('mouseout', () => console.log('mouseout на дочернем элементе')); 
</script>

В этом примере, если курсор переместится с родительского элемента на дочерний, mouseout на родителе и дочернем элементе сработает, но mouseleave не сработает до тех пор, пока курсор не покинет родительский элемент полностью.

Итог:

  • mouseleave удобен, когда нужно отследить полное покидание элемента, включая его дочерние элементы.

  • mouseout срабатывает при каждом выходе курсора из элемента или его дочерних элементов, что делает его полезным для отслеживания каждого движения между элементами внутри структуры.

Уровень

  • Рейтинг:

    1

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#event

#dom

Подпишись на React Developer в телеграм