Введение в обработку событий
Для взаимодействия с пользователем в 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
- событие происходит при прокручивании колеса мыши вперёд или назад над элементом.