Кратко
СкопированоОбъект Event
описывает событие, произошедшее на странице. Одной из причин возникновения событий являются действия пользователя, такие как клики мышкой Mouse
или ввод с клавиатуры Keyboard
. Существует множество различных событий с разным набором информации.
Пример
СкопированоСамый простой и широко распространённый способ использования событий — это отслеживание срабатывания кликов по каким-либо элементам на странице.
При подписке на событие мы передаём обработчик, который будет вызван при каждом срабатывании события в браузере. В случае, когда происходит событие типа click
, обработчик будет вызван с событием Mouse
:
element.addEventListener('click', function (event) { console.log(event)})
element.addEventListener('click', function (event) { console.log(event) })
Как пишется
СкопированоВ этом материале мы рассматриваем базовый объект события, каждое событие может содержать дополнительные свойства в зависимости от его типа, но список ниже есть у всех.
Свойства
Скопированоbubbles
— является ли данное событие всплывающим.cancelable
— является ли событие отменяемым.current
— указывает на элемент, на котором установлен обработчик события.Target default
— отменено ли поведение события по умолчанию.Prevented event
— указывает на фазу срабатывания события.Phase is
— указывает на происхождение события, будет в значенииTrusted true
, если событие инициировано действиями пользователя.false
— если событие инициировано из кода с помощьюdispatch
.Event ( ) target
— ссылка на объект, которым было инициировано событие. Например, если событие произошло на поле ввода, мы получим ссылку на этот DOM элемент.time
— время возникновения события в миллисекундах.Stamp type
— тип события.
Методы
Скопированоcomposed
— вернёт массив элементов, на которых сработает событие.Path ( ) prevent
— предотвращает дефолтное поведение события. Если вызвать этот метод на событии клика по ссылке, то переход по ссылке не произойдёт, но событие продолжит всплытие.Default ( ) stop
— предотвращает всплытие события.Propagation ( ) stop
— делает то же самое, что иImmediate Propagation ( ) stop
, но в том числе предотвращает вызов обработчиков события, которые были установлены на этом же элементе.Propagation
Как понять
СкопированоРабота JavaScript основана на событийной модели — это значит, что для того, чтобы запустить какой-либо код, должно произойти событие. Даже код, который был написан в файле и не привязан к какому-либо событию, будет обработан после того, как произойдёт событие, которое сообщит браузеру, что код был загружен.
Событие может быть создано по следующим причинам:
- действие пользователя;
- системное событие;
- событие, созданное программно.
Примеры
СкопированоСистемное событие
СкопированоСистемное событие инициируется DOM-окружением и является отражением какого-то события, произошедшего в операционной системе. Например, событие, что пользователь находится онлайн. То есть на наличие активного интернет-соединения.
Мы можем отслеживать состояние интернет-соединения и показывать сообщение, если оно пропало.
window.addEventListener('offline', function() { alert('Отсутствует подключение к интернету')})
window.addEventListener('offline', function() { alert('Отсутствует подключение к интернету') })
Программное событие
СкопированоСобытие может быть создано с помощью кода, поле is
в таком событии будет содержать значение false
, а значит, мы будем знать, что событие было вызвано не системно и не пользователем.
Создадим своё событие и вызовем его на window
:
const myEvent = new CustomEvent('my-event', { detail: { spicy: 123, },})window.addEventListener('my-event', function(evt) { console.log('В поле spicy:', evt.detail.spicy)})window.dispatchEvent(myEvent)
const myEvent = new CustomEvent('my-event', { detail: { spicy: 123, }, }) window.addEventListener('my-event', function(evt) { console.log('В поле spicy:', evt.detail.spicy) }) window.dispatchEvent(myEvent)
На практике
Скопированосоветует Скопировано
🛠 В событии есть два похожих поля: target
и current
. Их отличие легко увидеть на примере.
Создадим кнопку, положим в неё текст, обёрнутый в тег <span>
, и навесим обработчик событий на кнопку. При клике на кнопку можно заметить, что current
всегда будет кнопкой, на которой обрабатывается событие. При этом target
будет меняться в зависимости от того, куда на кнопке мы кликнули — на span
внутри кнопки или на неё саму.
<button class="button" type="button"> <span>Моя кнопочка</span></button>
<button class="button" type="button"> <span>Моя кнопочка</span> </button>
document.querySelector('.button').addEventListener('click', function (event) { console.log('Событие инициировано на', event.target) console.log('Событие поймано на', event.currentTarget)})
document.querySelector('.button').addEventListener('click', function (event) { console.log('Событие инициировано на', event.target) console.log('Событие поймано на', event.currentTarget) })
current
всегда будет элементом, к которому привязан обработчик, то есть элементом, на котором вызывался add
.
target
— это элемент, на котором произошло событие. Оно может не совпадать с current
, потому что большинство событий всплывают.