Przykłady użycia data-* w animacjach, walidacjach, interakcjach
Przykłady użycia data-* w animacjach, walidacjach, interakcjach
Atrybuty data-* doskonale sprawdzają się w dynamicznych elementach strony, takich jak animacje, formularze czy interakcje użytkownika. Dzięki nim możemy opisywać zachowanie komponentów w HTML i odczytywać je po stronie JavaScript – bez konieczności pisania osobnych klas czy ID dla każdej możliwej sytuacji.
Przykład 1: animacje z data-delay
Elementy mogą animować się z różnym opóźnieniem, określonym w HTML. Wystarczy zastosować atrybut data-delay i odczytać go w JS.
<div class="anim-box" data-delay="200">Box 1</div> <div class="anim-box" data-delay="600">Box 2</div> <div class="anim-box" data-delay="1000">Box 3</div>
document.querySelectorAll('.anim-box').forEach(box => {
const delay = parseInt(box.dataset.delay);
setTimeout(() => {
box.classList.add('visible');
}, delay);
});
Dzięki temu każde pudełko pojawia się z innym opóźnieniem, ale bez pisania 3 różnych funkcji JS.
Przykład 2: walidacja formularzy z data-validation
Możesz dodać do pól formularza informacje o wymaganiach walidacyjnych i komunikatach o błędach – bez hardcodowania reguł w JS.
<input type="email" name="email" data-validation="required" data-error="Podaj poprawny adres e-mail">
const input = document.querySelector('[name="email"]');
const isRequired = input.dataset.validation === "required";
if (isRequired && input.value.trim() === "") {
alert(input.dataset.error);
}
Dzięki temu możesz napisać jeden uniwersalny skrypt walidujący wszystkie pola na stronie.
Przykład 3: interakcje użytkownika
Przycisk może mieć w HTML informację o tym, jaką akcję ma wykonać. Wystarczy np. data-action.
<button class="ui-action" data-action="scroll-top">Do góry</button> <button class="ui-action" data-action="open-menu">Menu</button>
document.querySelectorAll('.ui-action').forEach(btn => {
const action = btn.dataset.action;
btn.addEventListener('click', () => {
if (action === "scroll-top") {
window.scrollTo({ top: 0, behavior: 'smooth' });
} else if (action === "open-menu") {
document.body.classList.toggle('menu-open');
}
});
});
Jeden skrypt, wiele możliwych działań – elastycznie i bez nadmiarowego kodu.
Propozycje do przetestowania
- Stwórz kilka przycisków z różnymi
data-actioni zaprogramuj im odpowiednie efekty - Dodaj
data-delaydo animacji obrazków w galerii - Rozbuduj formularz o
data-maxlength,data-patterni stwórz własny walidator JS
Dobre praktyki
- Przechowuj w
data-*tylko dane logiczne (nie style!) - Twórz komponenty oparte na danych – nie klasach wizualnych
- Stosuj spójne nazewnictwo i zawsze waliduj dane z HTML po stronie JS
🔗 Gotowy przykład do rozwinięcia
<li class="task"
data-priority="high"
data-status="in-progress"
data-user="admin">
Popraw błędy na stronie
</li>
Możesz stworzyć skrypt, który na podstawie tych danych ustala kolor zadania, widoczność, akcje dostępne dla danego użytkownika itp. Wszystko bez modyfikowania HTML – tylko na podstawie data-*.
💡 Wniosek
Użycie data-* w animacjach, walidacjach i interakcjach pozwala tworzyć komponenty naprawdę elastyczne i reużywalne. To most między strukturą a logiką. Im lepiej zorganizujesz dane, tym czystszy i łatwiejszy w rozwoju będzie Twój kod JS i CSS.
