Slider
W poniższym tekście postaramy się zrobić dynamiczny slider. Nie byle jaki. Całkowicie profesjonalny slider.
HTML i CSS
Zacznijmy od przygotowania odpowiedniego stylowania, oraz struktury HTML dla naszego slidera:
klasa Slider
Zakładamy, że sliderów na stronie możemy mieć kilka, więc przy jego tworzeniu dobrze jest skorzystać z klasy.
class Slider {
constructor(query) {
this.slider = document.querySelector(query); //element slider
this.slides = [...this.slider.querySelectorAll(".slider-slide")];
this.currentSlide = Math.max(0, this.slides.findIndex(el => el.classList.contains("is-active"))); //aktualny slide
}
}
const slider = new Slider("#mySlider");Na początku wyłapujemy ze strony slider oraz jego slajdy. Do ustawienia indexu aktualnie aktywnego slajdu wykorzystaliśmy Math.max(). Za pomocą metody findIndex() zwracam slajd, który posiada klasę is-active. Może się zdarzyć, że początkowo żaden ze slajdów nie będzie miał takiej klasy. Metoda findIndex zwróci nam wtedy -1. Korzystając z Math.max(0, -1) zwrócimy wtedy pierwszy slajd i to właśnie jego ustawimy na aktywny. Metodę findIndex możemy użyć dla this.slides tylko dlatego, że wcześniej zamieniliśmy tą kolekcję na tablicę za pomocą spread operator.
Metoda createPrevNext()
Pierwszą z metod będzie createPrevNext(), która stworzy przyciski do przełączania slajdów.
Przypisując metody do przycisków musieliśmy użyć metody bind(). Wynika to z tego, że gdy używasz klasycznych funkcji (ale i gdy podpinasz do zdarzeń funkcje przez ich nazwę) w ich wnętrzu this wskazuje na "kliknięty" element, a nie obiekt naszej klasy. Za pomocą bind lub funkcji strzałkowej możemy to zmienić:
Powyższą metodę odpalmy na końcu konstruktora.
Metody slidePrev() i slideNext()
W powyższej metodzie po kliknięciu na przyciski odpalamy zmianę aktualnego slajdu na poprzedni/następny za pomocą metod slidePrev() i slideNext():
Metody tylko wyliczają odpowiedni index slajdu. Do samej zmiany slajdu posłuży nam oddzielna metoda.
Metoda setSlide()
Przełączanie slajdu polegać będzie na usunięciu klasy is-active z aktywnego slajdu, a następnie ustawieniu jej następnemu slajdowi:
Przy okazji odpalmy tą metodę w konstruktorze (linia 4), dzięki czemu po uruchomieniu slajdera ustawi on sobie automatycznie odpowiedni slajd na aktywny.
Metoda createPagination()
Zmiany slajdów mamy kompletne. Kolejną czynnością jest stworzenie metody generującej paginację zmieniającą slajdy:
Tak samo jak poprzednio odpalmy ją też od razu w konstruktorze.
Przy zmianie slajdu powinniśmy ustawić na aktywną odpowiednią kropkę paginacji. Stwórzmy do tego oddzielną metodę:
Automatyzacja
Dodajmy do naszego slidera automatyczne przełączanie slajdów. Wykorzystamy tutaj setTimeout(). Wystarczy za pomocą tej funkcji wywołać powyższą metodę slideNext().
Gdy użytkownik najedzie kursorem na slider, możemy założyć, że może chce się dokładniej przyjrzeć, albo na spokojnie przeczytać co tam się znajduje (ale przecież wiemy, że tak na prawdę chce się delektować naszym dziełem). Na ten czas przydało by się wyłączyć automatyczne przewijanie. Posłuży nam do tego nowa metoda, którą odpalimy na końcu konstruktora:
Opcje
W powyższym kodzie przełączanie slajdów jest ustawione na sztywno co 6 sekund. Aż prosi się, by przy wywołaniu naszego slidera programista mógł ustawić takie wartości.
Zastosujemy tutaj podejście, które dokładniej opisałem tutaj. Do naszej klasy trafi obiekt z opcjami, które ustawi programista. Opcje te nadpiszą domyślne ustawienia, w wyniku czego dostaniemy nowy scalony obiekt z ustawieniami slidera.
lub
Dodajmy domyślne ustawienia w konstruktorze:
Domyślnie czas przerwy między kolejnym przełączaniem będzie wynosił 0. Jeżeli programista tego nie zmieni, nie będziemy przełączać automatycznie slajdów:
Podobne opcje możemy też ustawić dla innych rzeczy - np. generowania przycisków poprzedni/następny czy też paginacji:
Demo
Aby użyć naszego slidera, skorzystamy z kodu:
Last updated