jQuery - własny plugin
Korzystając z jQuery, nie raz używamy różnego rodzajów pluginów, czyli rozszerzeń do tej wspaniałej biblioteki. W tym artykule stworzymy nasze własne rozszerzenie.
Rozszerzenia do jQuery można podzielić na dwie części. Jedne z nich rozszerzają jQuery nie operując na elementach HTML:
$.fn.random = function(min, max) {
return Math.floor(Math.random()*(max-min+1)+min);;
}
console.log($.random(5, 50));Drugie - bardziej nas interesujące operują na zbiorach elementów. Przykładem takiej funkcji może myć np. fadeOut(), który powoduje zanikanie obiektów, które zostały do niego przekazane.
$(".someElements").fadeOut("slow");HTML i CSS
Nasz plugin będzie bardzo prostą karuzelą. Zanim zaczniemy pisać kod, stwórzmy HTML i CSS, który nam się przyda.
Ogólny schemat pluginów
Ogólny schemat plugiu może mieć postać:
(function($) {
$.fn.functionName = function(config) {
const options = $.extend({
//...parametry
}, config);
return this.each(function() {
//...metody, właściwości itp
});
}
})(jQuery);Nasz plugin powinien mieć określone parametry swojego działania, które użytkownik powinien móc nadpisać własnymi wartościami. W czystym Javascript użylibyśmy tutaj Object.assign() lub stread syntax. Podobne czynności robiliśmy już w rozdziale gdzie tworzyliśmy slider. W jQuery możemy skorzystać z funkcji extend():
Dzięki temu użytkownik używający naszego dodatku będzie mógł go odpalać przekazujac do niego stosowne parametry:
Tworzymy plugin
Przechodzimy do meritum. Plugin może być odpalony na pojedynczego ale i dla wielu elementów na stronie. Powinniśmy więc zrobić po nich pętlę i obsłużyć każdy z osobna:
Po pierwsze podstawmy odpowiednie elementy pod zmienne:
Podepnijmy teraz odpowiednie zdarzenia pod przyciski przesuwające:
Nasza karuzela będzie miała bardzo prostą zasadę. Jeżeli przewijamy listę w lewo, wtedy na pierwszą pozycję wrzucamy element z jej końca. Jeżeli listę przesuwamy w prawo, wtedy wrzucimy na jej koniec element z jej początku.
Pozostał nam przeciwny kierunek:
Nasze przesuwanie realizujemy tylko w momencie gdy nasza lista się nie przesuwa, stąd na początku sprawdzenie $ul.not(":animated").
Jeżeli elementów w karuzeli będzie mniej niż zajmowana przez nią przestrzeń, zauważalne będzie przekładanie elementu z lewej na prawą stronę. Bardzo prosto możemy to naprawić poprzez zduplikowanie elementów na liście.
Automatyczne przewijanie
Aby nasz slider dodatkowo automatycznie się przesuwał, wykorzystamy dobrze nam znaną metodę setTimeout(), którą podstawimy pod zmienną time.
Dodajemy więc dodatkową opcję auto, która automatycznie będzie odpalać funkcję scrollNext():
Automatyczne przesuwanie powinniśmy odpalić w trzech momentach: przy starcie naszej karuzeli, i gdy użytkownik będzie klikał przyciski Poprzedni/Następny.
Żeby nie duplikować kodu, napiszmy dodatkową funkcję i odpalmy ją w stosownych momentach:
Przykład użycia
I w zasadzie zakończyliśmy naszą pracę. Pozostaje odpalenie jej dla danych elementów.
<
>
Tutaj mała uwaga. W powyższym przykładzie do slajdów wstawiłem umyślnie różnej wielkości zdjęcia. Może tam się znaleźć tekst czy dowolny inny element. Gdy przewijamy karuzelę, pobieramy szerokość danego elementu. W przypadku zdjęć mogą one być w tym momencie jeszcze w pełni nie wczytane, dlatego przy ich używaniu warto dodać im atrybuty width/height.
Last updated