Введение в обработку событий
Для взаимодействия с пользователем в JavaScript определен механизм событий. Например, когда пользователь нажимает кнопку, то возникает событие нажатия кнопки. В коде JavaScript мы можем определить возникновение события и как-то его обработать.
Все события JavaScript можно разделить на следующие категории:
Mouse Events
события мыши, подробнееCSS Events
события CSS, подробнееKeyboard Events
события клавиатуры, подробнееFrame/Object Events
события объектов и фреймов, подробнееForm Events
события формы и элементов управления, подробнееDrag Events
события перетаскивания, подробнееAnimation Events
события анимации, подробнееClipboard Events
события буфера обмена, подробнееMedia Events
события мультимедиа, подробнееTransition Events
события трансформацииServer-Sent Events
события посылаемые сервером, подробнееTouch Events
события касанияPrint Events
события печати, подробнееMisc Events
разные события, подробнее
События мыши
mousedown
— при нажатии кнопки мыши;mouseup
— при отпускании кнопки мыши;click
— при клике (порядок возникновения событий приclick
:mousedown
->mouseup
->click
);dblclick
— при двойном клике (порядок возникновения событий приdblclick
:mousedown
->mouseup
->click
->mousedown
->mouseup
->click
->dblclick
);mousemove
— при перемещении курсора мыши;mouseover
— при вхождении курсора мыши в область, принадлежащей целевому элементу и других элементов, вложенных в него;mouseenter
— при вхождении указателя мыши в целевой элемент (в отличие отmouseover
происходит только один раз при вхождении курсора в целевой элемент; при дальнейшем движении курсора и его вхождении в другие элементы (находящихся в целевом) — оно больше не возникает);mouseout
— при уходе курсора с целевого элемента и других элементов, вложенных в него;mouseleave
— при покидании границ целевого элемента (в отличие отmouseout
не возникает при покидании курсора элементов вложенных в целевой);contextmenu
— при открытии контекстного меню.
События при CSS переходе
transitionrun
— возникает при создании CSS перехода (т.е. когда он добавляется к набору запущенных переходов, но не обязательно он начался);transitionstart
— происходит, когда CSS переход начинает выполняться;transitioncancel
— возникает, если CSS переход был отменен;transitionend
— происходит при завершении CSS перехода.
<style>
#box {
position: absolute;
top: 15px;
left: 15px;
width: 100px;
height: 100px;
background-color: #03a9f4;
}
.transform {
transform: translateX(300px);
transition: transform 1s ease-in-out;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', () => {
document.addEventListener('click', (e) => {
const $target = e.target;
if ($target.matches('#start')) {
e.preventDefault();
$box.classList.add('transform');
} else if ($target.matches('#cancel')) {
e.preventDefault();
$box.classList.remove('transform');
}
});
const $box = document.querySelector('#box');
$box.addEventListener('transitionrun', () => {
console.log('transitionrun');
});
$box.addEventListener('transitionstart', () => {
console.log('transitionstart');
});
$box.addEventListener('transitioncancel', () => {
console.log('transitioncancel');
});
$box.addEventListener('transitionend', () => {
console.log('transitionend');
});
});
</script>
<div id="box"></div>
<a href="#" id="start">Start</a>
<a href="#" id="cancel">Cancel</a>
События при CSS анимации
animationstart
— происходит, когда CSS анимация начинается;animationiteration
— возникает, когда заканчивается одна итерация CSS анимации и начинается другая;animationend
— происходит при окончании CSS анимации.
События клавиатуры
Порядок возникновения событий: keydown
-> keypress
-> keyup
.
keydown
— событие происходит, когда нажата клавиша на клавиатуре над элементом, но ещё не отпущена.keyup
— событие происходит, когда нажатая клавиша на клавиатуре над элементом перешла в состояние отпущено.keypress
— событие происходит, когда пользователь нажал клавишу на клавиатуре над элементом.
События объектов и фреймов
DOMContentLoaded
— браузер полностью загрузил HTML, было построено DOM-дерево, но внешние ресурсы, такие как картинки и стили, могут быть ещё не загружены.beforeunload
— событие происходит, перед тем как документ будет выгружен. Это событие позволяет отображать дополнительное сообщение в диалоговом окне подтверждения «Вы действительно хотите покинуть эту страницу?». Стандартное сообщение, которое появляется при закрытии документа, может отличаться в разных браузерах. Но его Вы не можете изменить или удалить, Вы можете только с помощью этого метода добавить к нему собственное сообщение, которое будет отображаться вместе с сообщением по умолчанию.error
— событие срабатывает при возникновении ошибки, которая происходит при загрузке внешнего файла (например, документа или изображения).hashchange
— событие происходит при изменении якорной части (начинается с символа «#») текущего URL.load
— событие происходит, когда загрузка объекта завершена. Событиеload
наиболее часто используется для элементаbody
, чтобы выполнить сценарий сразу же после того как веб-страница полностью загрузится.unload
— событие происходит при выгрузке страницы (например, при закрытии вкладки (окна) браузера).pageshow
— событие происходит, когда пользователь переходит на веб-страницу, т.е. после того как страница становится доступна пользователю. Событиеpageshow
похоже на событиеload
, за исключением того, что оно срабатывает каждый раз при загрузке страницы, даже если она загружается из кэша. При первой загрузке страницы событиеpageshow
срабатывает сразу после событияload
.pagehide
— событие происходит, когда пользователь уходит со страницы (событиеpagehide
происходит до событияunload
). Кроме этого данное событие, в отличие от событияunload
не препятствует кэшированию страницы.resize
— событие происходит при изменении размеров окна браузера.scroll
— событие происходит, когда вы прокручиваете содержимое элемента, имеющего полосу прокрутки.
События формы и элементов управления
focus
— событие происходит, когда элемент получает фокус. Данное событие не всплывает.blur
— событие происходит, когда объект теряет фокус. Данное событие не всплывает.focusin
— событие происходит, когда элемент получает фокус. Событиеfocusin
подобно событиюfocus
, но отличается от него тем, что оно всплывает. Поэтому его можно использовать, когда Вам необходимо выяснить, кто теряет фокус: элемент или его ребёнок?focusout
— событие происходит, когда элемент собирается потерять фокус. Событиеfocusout
подобно событиюblur
, но отличается от него тем, что оно всплывает. Поэтому его можно использовать, когда Вам необходимо выяснить, кто теряет фокус: элемент или его ребёнок?change
— событие происходит при изменении значения элемента, но уже после того как элемент потерял фокус. Кроме событияchange
в JavaScript есть также похожее событиеinput
, которое отличается от событияchange
тем, что происходит сразу же после изменения значения элемента. Событиесhange
в отличие от событияinput
также работает с элементамиkeygen
иselect
. Для радиокнопок (radiobuttons
) и флажков (checkboxes
) событиеchange
происходит при изменении состояния этих элементов.input
— событие происходит после того как изменяется значение элементаinput
или элементаtextarea
.invalid
— событие происходит, когда элементinput
, данные которого необходимо отправить вместе с другими данными формы на сервер, содержит недопустимые данные.reset
— событие происходит перед очисткой формы, которая осуществляется элементомinput
сtype="reset"
.search
— событие возникает после того как пользователь нажимает на клавишу Enter или нажимает кнопку «x
» (отмена) в элементеinput
сtype="search"
.select
— событие происходит после того как Вы выбрали некоторый текст в элементе. Событиеselect
в основном используется для элементаinput
сtype="text"
илиtextarea
.submit
— событие происходит перед отправкой формы на сервер.
События перетаскивания
События, связанные с перетаскиваемым объектом (draggable
target
, исходный объект):
dragstart
— событие происходит, когда пользователь начал перетаскивать элемент;drag
— событие происходит, когда пользователь перетаскивает элемент;dragend
— событие происходит, когда пользователь закончил перетаскивания элемента, т.е. когда отпустил курсор мыши.
События, связанные с объектом (drop target
), который принимает перетаскиваемый объект (draggable target
):
dragenter
— событие происходит, когда перетаскиваемый объект (draggable target) вошёл в область элемента (drop target), который может принять перетаскиваемый объект (draggable target).ragleave
— событие происходит, когда перетаскиваемый объект (draggable target) покидает пределы элемента (drop target), который может его принять.dragover
— событие происходит, когда перетаскиваемый объект (draggable target) перемещается в области элемента (drop target), который может его принять.drop
— событие происходит, когда пользователь отпускает перетаскиваемый объект (draggable target) в область элемента (drop target), который может его принять.
События буфера обмена
сopy
— событие происходит, когда пользователь копирует содержимое элемента. Событиеcopy
также происходит, когда пользователь копирует элемент (например, изображения, созданные с помощью элементаimg
). Событиеcopy
используется в основном для элементовinput
сtype="text"
.сut
— событие происходит, когда пользователь вырезает содержимое элемента.paste
— событие происходит, когда пользователь вставляет некоторое содержимое в элемент.
События печати
afterprint
— событие происходит, когда страница начинает печататься (т.е. после нажатия кнопки «Печать» в диалоговом окне) или если диалоговое окно «Печать» было закрыто.beforeprint
— событие возникает перед печатью страницы, т.е. до открытия диалогового окна «Печать».
События, посылаемые сервером
error
— событие возникает при возникновении ошибки с источником события. Ошибка обычно возникает, когда связь нарушается. Если это произойдет, то объектEventSource
будет автоматически пытаться подключиться к серверу.open
— событие возникает, когда соединение с источником события открыто.message
— событие возникает, когда сообщение получено через источник события.
Объектevent
событияmessage
поддерживает следующие свойства:data
— содержит сообщение.origin
— URL документа, который вызвал событие.lastEventId
— идентификатор (id
) последнего полученного сообщения.
События мультимедиа
В процессе загрузки аудио/видео события происходят в следующем порядке: loadstart
-> durationchange
-> loadedmetadata
-> loadeddata
-> progress
-> canplay
-> canplaythrough
.
abort
— событие возникает, когда прерывается загрузка аудио/видео. Это событие возникает именно когда загрузка медиа данных была прервана (отменена), а не, потому что возникла ошибка.error
— событие возникает, когда произошла ошибка при загрузке аудио/видео.stalled
— событие возникает, когда браузер пытается получить медиа данные, но данные недоступны.suspend
— событие возникает, когда браузер не может получить медиа данные, т.е. загрузка медиа останавливается по какой-то причине.loadstart
— событие происходит, когда браузер начинает искать указанное аудио/видео, т.е. когда начинается процесс загрузки.durationchange
— событие возникает, когда изменяется длительность аудио/видео. Если аудио/видео загружается, то длительность будет меняться от значения «NaN» до фактической длительности аудио/видео.loadedmetadata
— событие возникает, когда метаданные для указанного аудио/видео загружены. Метаданные аудио/видео состоят из: длительности, размера (только видео) и текстовой дорожки.loadeddata
— событие возникает, после того как первый кадр медиа загрузился.progress
— событие происходит, когда браузер загружает указанное аудио/видео.canplay
— событие возникает, когда браузер может начать воспроизведение указанного аудио/видео (т.е. когда буферизация потока аудио/видео достаточна для того чтобы браузер мог начать его воспроизводить).canplaythrough
— событие возникает в тот момент времени, когда браузер может проигрывать указанное медиа без остановки на буферизацию.ended
— событие происходит, когда воспроизведение аудио/видео завершилось (достигло конца). Это событие может использоваться для вывода сообщений типа «Спасибо за внимание», «Спасибо за просмотр» и др.pause
— событие происходит, когда воспроизведение аудио/видео приостановлено пользователем или с помощью кода (программно).play
— событие происходит, когда начинается воспроизведение аудио/видео. Оно также происходит, когда аудио/видео было снято с паузы и начинает воспроизводиться.playing
— событие происходит, когда аудио/видео воспроизводится после того как оно было поставлено на паузу или остановилось для буферизации.ratechange
— событие происходит, когда изменяется скорость воспроизведения аудио/видео.seeking
— событие происходит, когда пользователь начинает перемещение ползунка (переход) к новой временной позиции проигрываемого аудио/видео.seeked
— событие происходит, когда пользователь закончил перемещение ползунка (переход) в новую временную позицию проигрываемого аудио/видео. Событиеseeked
противоположно событиюseeking
. Для того чтобы получить текущую позицию воспроизведения, используйте свойствоcurrentTime
объектаAudio
/Video
.timeupdate
— событие происходит при изменении временной позиции воспроизводимого аудио/видео.
Это событие происходит:- при воспроизведении потока аудио/видео.
- при перемещении ползунка в новую временную позицию воспроизводимого аудио/видео.
timeupdate
часто используется вместе со свойством объектаAudio
/Video
currentTime
, которое возвращает текущую временную позицию воспроизводимого аудио/видео в секундах.volumechange
— событие происходит каждый раз при изменении громкости воспроизводимого потока видео/аудио.
Это событие происходит, при:- увеличении или уменьшении громкости;
- отключении или включении звука.
waiting
— событие происходит, когда видео останавливается для буферизации.
Разные события
toggle
— событие происходит, когда пользователь открывает или закрывает элементdetails
. Элементdetails
предназначен для создания дополнительных сведений, которые пользователь при необходимости может просматривать или скрывать.wheel
— событие происходит при прокручивании колеса мыши вперёд или назад над элементом.