08 Модуль - Вслытие событий -- 01 Распространение. Всплытие. Делегирование Flashcards
Распространение событий двунаправлено — оно
начинается на window, идет к целевому элементу и заканчивается на window.
Распространение событий при наступлении события, оно проходит через три обязательные фазы:
capture phase(затопление), target phase(таргетинг) и bubbling phase(всплытие)
Capture phase(затопление) — событие
начинается на window и тонет (проходит через все узлы-предки ) до самого глубокого целевого элемента(target phase) , где произошло событие.
Target phase(таргетинг) — событие
Этот этап включает только уведомление узла, на котором произошло событие.
Bubbling phase(всплытие) — заключительная фаза, событие
всплывает от самого глубокого, целевого элемента(target phase), через все узлы-предки, до window.
Основной принцип всплытия(event bubbling) — при наступлении события,
обработчики сначала срабатывают на самом вложенном элементе, затем на его родителе, затем выше и так далее, вверх по цепочке вложенности. (У всех элементов должны быть с обработчиками клика на каждом.)
event.target — это
ссылка на исходный элемент, на котором произошло событие, в процессе всплытия он неизменен.
event.currentTarget — это
текущий элемент, до которого дошло всплытие, на нём сейчас выполняется обработчик.
Обычно событие будет всплывать наверх, до элемента window, вызывая все обработчики на своем пути. Но любой промежуточный обработчик может решить, что событие полностью обработано, и остановить всплытие. Остановить всплытие можно вызвав метод на объекте события.
event.stopPropagation()
Если у элемента есть несколько обработчиков на одно событие, то даже при прекращении всплытия
все они будут выполнены. То есть, stopPropagation препятствует продвижению события дальше, но на текущем элементе все обработчики выполнятся.
event.stopImmediatePropagation() используется для того, чтобы
полностью остановить обработку события. Он не только предотвращает всплытие, но и останавливает обработку событий на текущем элементе.
Делегирование событий(event delegation), заключается в том, что
если есть много элементов, события которых нужно обрабатывать похожим образом, то вместо того чтобы назначать обработчик каждому, мы ставим один обработчик на их общего предка.
event delegation - Теперь для доступа к элементу, на котором произошло событие, используем свойство
target - это элемент, на котором произошел клик. Таким образом, мы получаем прямой доступ к целевому элементу, абзацу, и можем работать с ним.
Для проверки типа узла используем свойство
nodeName
Каждый раз, когда происходит событие, происходит его
распространение.