2024-05-19 18:06:35
  • Hello!
  • Whats ya doin?
  • ByeBye

[&]

3.149.238.159

Obsługa zdarzeń - Odtwarzacz, Reakcje, Komentarze

exercises: #js16-cw-events.html

Obsługa zdarzeń #2

Metody closest(), preventDefault() oraz stopPropagation()

Przygotowanie

  1. Uczeń zapoznał się z wykładem nt. Interfejsu obsługi zdarzeń Event JS-W5
  2. Przygotuj katalog do pracy 16-events
  3. Utwórz plik demo.html oraz umieść w nim kod z punktu 1
  4. Przygotuj dwa pliki skryptów JS events-2.js na warsztat nr2 oraz events-3.js na warsztat nr3
  5. Zaimplementuj wskazane funkcjonalności na podstawie wykładu w kolejnych plikach skryptów
1 Struktura HTML i Podstawowy CSS

Fragment kodu do warsztatu #2

<article>
  <header>Metoda stopPropagtion()<hr/></header>
  <p>Obczaj najnowszy trailer filmu Deadloop 3 !!!</p>
  <button>► Odtwarzaj wideo</button>
  <section>
    <div>
      <span>►</span>
    </div>
  </section>
</article>

Podstawowy kod CSS (do umieszczenia w nagłówku dokumentu):

button {
	border: solid 2px blue;
	backgroud: white;
}
section {
	background: grey;
	color: white;
	display: none;
	padding: 1rem;
}
section > div {
	background: black;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 1rem;
	height: 240px;
	width: 320px;
}
div > span { cursor: pointer; font-size: 300%; }
a > span {
	background: green;
	border-radius: 50%;
	color: white;
	padding: 0 .5rem;
}
2 Metoda stopPropagation()

Przydatne metody i obiekty:

// obiekty:
document.*
// metody:
querySelector( selektor )
addEventListener( zdarzenie, funkcja )
stopPropagation()
// właściwości:
*.target
*.parentNode
*.textContent

Kroki implementacji mechanizmu:

  • Wyszukaj węzeł button i dodaj obsługę zdarzenia click dla metody wyświetlenia odtwarzacza openPlayer()

  • Wyszukaj szary węzeł, dodaj do niego obsługę zdarzenia click dla metody closePlayer() oraz wyświetl węzeł

  • Wyszukaj szary węzeł oraz ukryj ten węzeł

  • Wyszukaj węzła z przyciskiem i dodaj do niego obsługę zdarzenia click dla metody playVid

  • Dla zdarzenia należy wstrzymać propagację oraz ustawić dla kontenera czarnego kolor tła na zielony

3 Metoda preventDefault()
<article>
	<header>Metoda preventDefault()<hr/></header>
	<p>Problemy, które może rozwiązać preventDefault:</p>
	<ul>
	  <li>Nie chcemy zapamiętywać w hisorii przeglądania adresu URL wewnętrznego (#doGory)</li>
	  <li>Nie chcemy przypadkowo opuścić strony przekierowaniem z Odnosnika (A HREF)</li>
	  <li>Nie chcemy przeładować dokumentu przesyłając Formularz klasycznym POST-em, zamiast dynamicznie AJAX-em</li>
	</ul>
	<div>
	  <h3>Komentarze</h3>
	  <a href="#supr">Supr <span>0</span></a>
	  <a href="#ok">OK <span>0</span></a>
	  <a href="#lame">Lamee <span>0</span></a>
	  <div>Brak komentarzy</div>
	</div>
	  <h3>Skomentuj artykuł:</h3>
	<footer>
	<form>
	  <label>Autor</label>
	  <input type="text" name="autor" /><br/>
	  <label>Treść</label>
	  <textarea name="tresc"></textarea><br/>
	  <input type="submit" name="dodaj" value="Skomentuj" />
	</form>
	</footer>
</article>

Kroki implementacji mechanizmów:

  • Wyszukaj przycisk submit i dodaj dla metody addComment obsługę zdarzenia click

  • Odczytaj w metodzie zdarzenie oraz użyj metody wstrzymujacej wykonanie domyślnego działania dla zdarzenia

  • Następnie w tej samej metodzie wyszukaj pola formularza autor oraz tresc. Odczytaj ich wartości z atrybutu value i wyświetl w konsoli deweloperskiej

  • Wyszukaj wszystkie znaczniki odnosnika A oraz w petli do każdego znacznika dodaj obsługę metody addOne dla zdarenia click

  • W metodzie addOne należy zablokować domyślne działanie zdarzenia, następnie wyświetlić w konsoli, na jakim węźle zdarzenie miało miejsce (atrybut target)

  • Dalej należy z tego węzła wyszukać najbliższy węzłe A i zapisać go do zmiennej btn oraz wyświetlić ją w konsoli (porównać z atrybutem target)

  • Następnie w metodzie na zmiennej btn wyszukać węzeł span i zapisać do zmiennej cnt

  • Ze zmiennej cnt odczytać atrybut textContent, dodać do niego wartość liczbową 1 i zapisać spowrotem do tego atrybutu

Podsumowanie

  1. Dostęp do jakich informacji, właściwości oraz metod zyskamy, jeżeli metoda obługująca zdarzenie będzie zawierać parametr e?
  2. Dlaczego warto używać metody closest()?
  3. Jaką metodą należy dodać obsługę zdarzenia i w jaki sposób? Jak należy dodać obsługę zdarzenia dla kolekcji węzłów?