Сегодня мы погрузимся в одну из самых важных тем для создания интерактивных веб-страниц, работу с событиями в JavaScript. Если вы мечтаете, чтобы ваши кнопки реагировали на клики, элементы менялись при наведении курсора, а страница адаптировалась к скроллу, этот урок станет вашим проводником.
События в JavaScript это действия, которые происходят на веб-страницею Клики мыши, нажатия клавиш, загрузка контента, скролл и многое другое. Они позволяют сделать сайт «живым», реагирующим на действия пользователя. Без событий веб-страницы были бы статичными, как обычные документы в Word.
Примеры событий:
- Пользовательские: клик (
click
), двойной клик (dblclick
), наведение (mouseover
), скролл (scroll
), ввод текста (input
). - Системные: загрузка страницы (
load
), ошибка (error
), изменение размеров окна (resize
).
События можно «ловить» и обрабатывать с помощью функций-обработчиков (event handlers). Именно так мы связываем действия пользователя с логикой нашего скрипта.
Обработка кликов, наведений и скролла
Давайте разберем три популярных типа событий на практических примерах.
1. Клики (click)
Клик самое часто используемое событие. Например, вы можете добавить реакцию на нажатие кнопки:
<button id="myButton">Нажми меня</button> <script> const button = document.getElementById('myButton'); button.onclick = function() { alert('Кнопка нажата!'); }; </script>
Но есть более гибкий способ — метод addEventListener()
.
2. Наведение (mouseover и mouseout)
Эти события срабатывают, когда курсор попадает на элемент (mouseover
) или покидает его (mouseout
):
<div id="hoverMe">Наведи курсор</div> <script> const div = document.getElementById('hoverMe'); div.addEventListener('mouseover', function() { this.style.backgroundColor = 'lightblue'; }); div.addEventListener('mouseout', function() { this.style.backgroundColor = 'white'; }); </script>
3. Скролл (scroll)
Событие scroll
отслеживает прокрутку страницы или элемента. Например, можно скрывать шапку при скролле вниз:
window.addEventListener('scroll', function() { const header = document.querySelector('header'); if (window.scrollY > 100) { header.style.display = 'none'; } else { header.style.display = 'block'; } });
Методы addEventListener() и removeEventListener()
Эти методы основа работы с событиями. Они позволяют добавлять и удалять обработчики, что особенно важно для оптимизации производительности.
addEventListener()
Синтаксис:
element.addEventListener(event, handler, options);
event
— название события (например,'click'
).handler
— функция, которая выполнится при событии.options
— необязательные параметры (например,{ once: true }
для однократного срабатывания).
Пример:
const button = document.querySelector('#myButton'); function showMessage() { console.log('Сообщение после клика!'); } button.addEventListener('click', showMessage);
removeEventListener()
Чтобы удалить обработчик, нужно передать те же аргументы, что и в addEventListener()
:
button.removeEventListener('click', showMessage);
Функция-обработчик должна быть сохранена в переменной, иначе удаление не сработает.
Практические задачи
Задача 1: Кнопка-счетчик
Создайте кнопку, которая увеличивает счетчик при каждом клике.
<button id="counterBtn">Кликов: 0</button> <script> let count = 0; const btn = document.getElementById('counterBtn'); btn.addEventListener('click', function() { count++; this.textContent = `Кликов: ${count}`; }); </script>
Задача 2: Появление подсказки
При наведении на иконку «?» показывайте подсказку, а при уходе курсора скрывайте.
<span class="hint">?</span> <div class="tooltip">Это подсказка!</div> <script> const hint = document.querySelector('.hint'); const tooltip = document.querySelector('.tooltip'); hint.addEventListener('mouseover', () => { tooltip.style.visibility = 'visible'; }); hint.addEventListener('mouseout', () => { tooltip.style.visibility = 'hidden'; }); </script>
Задача 3: Закрытие модального окна
Сделайте так, чтобы модальное окно закрывалось при клике вне его области.
const modal = document.querySelector('.modal'); window.addEventListener('click', function(event) { if (event.target === modal) { modal.style.display = 'none'; } });
Советы
- Именуйте обработчики. Если функция используется в
removeEventListener
, объявите её отдельно, а не анонимно. - Оптимизируйте скролл. Событие
scroll
срабатывает очень часто, используйте «троттлинг» (например,setTimeout
), чтобы снизить нагрузку. - Практикуйтесь. Создавайте мини-проекты: интерактивные формы, слайдеры, игры. Это лучший способ понять события!
Теперь вы умеете работать с событиями в JavaScript! Это основа для создания динамичных и отзывчивых интерфейсов. В следующих уроках мы будем использовать эти знания для более сложных задач: Drag & Drop, анимаций и работы с формами.
Не останавливайтесь! Переходите к полному курсу по JavaScript для начинающих, чтобы освоить язык целиком.