Poznajemy klasę Event w JavaScript i jej metody. Kontynuacja lekcji poprzednich. Do dzieła.
Klasa Event posiada konstruktor. Można jej używać jako alternatywę już poznanego CustomEvent:
const evt = new Event("look", { bubbles: true, cancelable: false });
document.dispatchEvent(evt);
Nie twierdzę, że należy tak robić, ale można i na taki kod też się gdzieś natkniemy.
Kolejne metody klasy event to:
- stopPropagation
- stopImmediatePropagation
- preventDefault
- composedPath
Stop Propagation: stopuje propagację w górę (bąbelkowanie). Już to sobie omawialiśmy.
event.stopPropagation()
Stop Immediate Propagation: stopuje propagację wszerz (czyli kilka listenerów na taki sam/podobny event). Warto dodać, że kolejność propagacji wszerz zależy od kolejności dodawanie event listenerów (od góry do dołu).
event.stopImmediatePropagation()
Prevent Default: zatrzymuje domyślne działanie eventu, jeżeli event nie jest pasywny (mówiąc językiem opcji event listenera) lub jest cancellable (mówiąc językiem opcji klasy Event/CustomEvent).
Warto dodać, że pasywne/niecancellowalne eventy również można zatrzymać słowem kluczowym return.
Composed Path: poznaliśmy już takie coś jak composed. Oznacza to, czy event będzie propagował z shadow DOMu powyżej shadow DOM. Composed path to coś nieco innego, jest to ścieżka wszystkich elementów, na których listenery będą odpalone:
document.querySelector("html").addEventListener("click", (e) => {
console.log(e.composed);
console.log(e.composedPath());
});
Composed – czy event, jeśli emitowany w shadow DOMie, będzie bąbelkował powyżej shadow DOM, do normalnego DOMu. Composed Path – ścieżka, po której będzie bąbelkował event.
Tak, jeżeli jeszcze pamiętamy, event idzie z widow w dół, odwiedzając wszystkich pośredników (przodków między window a target) w tzw. capture phase. Gdy event uderzy target mamy target phase.
Od tego target phase zaczyna się bąbelkowanie w górę po wszystkich pośrednikach między targetem a window. Czyli composed path to będzie target, rodzic targetu, jego rodzic, aż do window.
Composed Path oznacza, że na tej ścieżce można też ustawić listenery i będą się one odpalać podczas fazy bąbelkowania w kolejności podanej przez composed path (nie licząc tych, które odpalono w capture phase).
Jeżeli nie rozumiemy, to pobawmy się tym, pododawajmy composedPath do bąbelkujących eventów z poprzednich przykładów, aż wszystko stanie się jasne.