LBweb Łukasz Bącik
dialog element Komentarze: 0

Dialog, czyli natywne, wyskakujące okno

Okna dialogowe są często wykorzystywane na stronach internetowych. Potrzeba ich wykorzystania nasiliła się, gdy zaczęto wprowadzać na szeroką skalę powiadomienia o ciasteczkach na stronie. Do pewnego momentu wykorzystywano po prostu pojawiający się div, jednak dzisiaj jest też natywna możliwość wykorzystania elementu

.

Wstęp

Obecnie przeglądarki używają element <dialog>, który ułatwia tworzenie okien dialogowych i tzw. lightbox’ów. Dzięki JavaScript można wywoływać metody, aby otworzyć lub zamknąć element dialog, lub dowiedzieć się, kiedy okno zostało zamknięte przez zdarzenie.

Jak to działa?

Domyślnie element <dialog> jest ukryty na stronie. W momencie wykonania się metody showModal() element otrzymuje atrybut open i jest wyświetlany na ekranie. Zamknięcie okna odbywa się przy pomocy metody close().

Podstawowy kod okna dialogowego wygląda następująco:

<dialog id="modal">
	<form method="dialog">
		<label>Imię</label>
		<input type="text" name="name" />
		<button>Przejślij</button>
	</form>
</dialog>

Taka konstrukcja to nic innego jak pobranie od użytkownika imienia za pomocą formularza. Jak już wyżej wspomniałem, okno domyślnie jest ukryte. Oto jak wyświetlić element dialog:

document.querySelector("#modal").showModal()

Z kolei zamknięcie to poniższy kod:

document.querySelector("#modal").close()

Eventy okna dialogowego

Definiujemy zdarzenia potrzebne do określenia, co stało się z naszym formularzem w oknie dialogowym:

const modal = document.querySelector("#modal");

// gdy okno zostało zamknięte
modal.addEventListener('close', function() {
	if(modal.returnValue === 'SUBMITTED')
		alert('Przesłano formularz poprawnie');
	else if(modal.returnValue === 'CANCELLED')
		alert('Przesyłanie wstrzymane');
});

// gdy user zamknął okno dialogowe
modal.close('CANCELLED');

// gdy user przesłał poprawnie formularz wewnątrz
modal.close('SUBMITTED');

Tło poza elementem dialog

Jest możliwość określenia jakie style otrzyma tło dookoła elementu dialog. Należy zdefiniować pseudo-selektor ::backdrop w następujący sposób:

#modal::backdrop {
	background: rgba(0,0,0,0.3);
}

To pozwoli nam na przyciemnienie tła poza modalem, aby skupić uwagę użytkownika na samym oknie dialogowym.

Wsparcie przeglądarek

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *