Mootools 1.1 - Slider.js
20 sierpnia, 2007
Wraz z tą częścią kursu rozpoczynamy dwuczęściowe dokształcanie się w dziedzinie przewijania elementów. Plugin slider.js służy do tworzenia paska przewijania. Sam pasek jest tworzony przez klasę Slider, która na podstawie informacji o elementach tworzy go.
Do stworzenia paska przewijania potrzebujemy zaledwie dwóch elementów - dwóch divów z których jeden jest zagnieżdżony w drugim. Ten zagnieżdżony będzie służył do przewijania, a ten nadrzędny będzie ścieżką dla przewijanego w nim diva.
Klasa Slider jest dość rozbudowana w stosunku do już poznanych pluginów - posiada 3 własne opcje, jedną metodę, 3 zdarzenia, a przy inicjalizacji pobiera 3 argumenty (a więc małe odstępstwo od dotychczasowych reguł - zwykle klasa związana z efektami pobierała dwa argumenty).
Zaczniemy od teorii, a następnie zajmiemy się stworzeniem dwóch pasków przewijania - poziomego i pionowego.
Składnia klasy Slider jest ściśle związana z budową samego paska przewijania:
var pasek = new Slider("sciezka","galka",{opcje});
gdzie zmienna "sciezka" to oczywiście identyfikator ścieżki po jakiej będzie można poruszać elementem posiadającym identyfikator przypisany do zmiennej "galka". Obiekt opcji to oczywiście dodatkowe parametry klasy i zdarzenia:
- steps - opcja ta definiuje ilość miejsc na ścieżce w których przy przesuwaniu gałki wystąpi zdarzenie onChange (domyślna wartość to 100),
- mode - opcja w której możemy zdecydować o typie paska przewijania - poziomy ("horizontal" - wartość domyślna) lub pionowy ("vertical"),
- offset - dzięki temu parametrowi możemy określić jak daleko (w pikselach) poza ścieżkę może wyjść podczas przesuwania nasza gałka - jest opcja raczej o znaczeniu estetycznym. Domyślna wartość to 0.
- onChange - zdarzenie to występuje w momencie przemieszczenia się gałki. Jego częstotliwość zależy od opcji steps. W tym zdarzeniu definiujemy to co ma się dziać w czasie przemieszczania gałki.
- onComplete - zdarzenie, które pojawi się w momencie zakończenia przesuwania gałki.
- onTick - to zdarzenie określa co stanie się gdy użytkownik kliknie w dowolnym miejscu ścieżki. Domyślnie do miejsca kliknięcia zostaje przesunięta gałka.
I pozostaje nam metoda set. Jest ona bardzo prosta w użyciu - przy wywołaniu jako argument pobiera miejsce do jakiego ma się przesunąć gałka (oczywiście argument ten należy do przedziału [0, steps] ):
pasek.set(0);
Powyższy kod ustawi gałkę na początku ścieżki.
Jak widzimy klasa Slider oddaje nam do dyspozycji wszystkie narzędzia niezbędne do stworzenia pełnowartościowego paska przewijania. Tak naprawdę możnaby się pokusić o stworzenie odpowiednika standardowego paska przewijania, jednak złożoność tego zagadnienia (trzeba uwzględnić przytrzymywanie przycisków góra/dół czy poruszanie rolką myszki w obrębie przewijanego elementu i nad paskiem, długość gałki do przewijania zależna od ilości treści w elemencie), sprawia, że skupimy się na prostszych przykładach. Warto jednak mieć świadomość, że dzięki klasie Slider istnieje możliwość stworzenia nietypowego paska przewijania, które z reguły spotykamy w animacjach flash.
Nasze przykłady zaczniemy od poziomego paska przewijania - będziemy przewijać div z bardzo długim tekstem, którego widoczność została ograniczona przez parametr overflow.
Jeśli chodzi o kod xHTML to wystarczy nam wiedza, że identyfikatory elementów są takie same jak w przypadku prezentowanej składni klasy Slider, a przewijany element ma identyfikator "przewijany".
Zaczynamy od pobrania danych o przewijanym elemencie po to by móc ustalić wartość niektórych opcji klasy Slider:
var rozmiary = $("przewijany").getSize();
Interesuje nas długość elementu na której podstawie określimy wartość opcji steps. Przyjmijmy, że przewinięcie będzie powodowało przesunięcie o 5 pikseli:
var s = (rozmiary.scrollSize.x/5).round();
Jak widzimy zaokrąglamy wynik dzielenia długości elementu przez wartość pojedynczego przesunięcia, a następnie w wypadku gdy wartość długości przewijanego elementu nie była podzielna przez 5, zwiększamy zmienną s o jeden:
if(rozmiary.scrollSize.x > s){
s++;
}
Teraz możemy już przejść do samej klasy Slider:
var pasek = new Slider("sciezka","galka",{steps: s});
Pozostaje jeszcze dodać zdarzenie onChange i metodę set:
var pasek = new Slider("sciezka","galka",{
steps: s,
onChange: function(step){
$("przewijany").scrollTo(step*5,0);
}
}).set(0);
Jak widzimy zdarzenie onChange pobiera jako argument aktualną pozycję gałki. Powyższy kod umieszczamy oczywiście w zdarzeniu onload obiektu window i już możemy podziwiać pasek przewijania w akcji:
To teraz pora na to samo tylko, że pionie i z paroma dodatkami.
Po pierwsze - pierwsza linijka pozostaje bez zmian - nadal musimy mieć dostęp do rozmiarów elementów:
var rozmiary = $("przewijany").getSize();
W kolejnych linijkach zmienia się tylko x na y:
var s = (rozmiary.scrollSize.y/5).round();
if(rozmiary.scrollSize.y > s){
s++;
}
Także klasę Slider inicjujemy w podobny sposób, zmienia się kod zdarzenia onChange i dodajemy opcję mode:
var pasek = new Slider("sciezka","galka",{
steps: s,
mode: "vertical",
onChange: function(step){
$("przewijany").scrollTo(0,step*5);
}
}).set(0);
A dokładniej odwróceniu ulegają argumenty metody scrollTo.
Żeby nie było tak nudno to dodamy jeszcze przyciski góra/dół, ale tylko z reakcją na jednokrotne kliknięcie (bez trzymania) - tworzymy dwa przyciski posiadające identyfikatory "gora" i "dol" i dodajemy do nich zdarzenia onclick. Aby zdobyć informację o aktualnym położeniu gałki korzystamy w właściwości step klasy Slider:
$("gora").addEvent("click",function(){
pasek.set(this.step++);
});
$("dol").addEvent("click",function(){
pasek.set(this.step--);
});
No tylko pojawia się teraz mały problem, bo przez klikanie przycisków możemy przekroczyć zakres [0, steps] - trzeba się przed tym zabezpieczyć:
$("gora").addEvent("click",function(){
if(pasek.step > 0){
pasek.set(pasek.step-1);
}
});
$("dol").addEvent("click",function(){
if(pasek.step < pasek.options.steps){
pasek.set(pasek.step+1);
}
});
Teraz już powinno być bezpiecznie :)
I cały powyższy kod w akcji:
W ten oto sposób przebyliśmy połowę drogi naszego dokształcania się w dziedzinie przewijania elementów :) Drugą połowę przebędziemy podczas omawiania pluginu Scroller.js ;)
Komentarze do wpisu "Mootools 1.1 - Slider.js":
1.
Pbnan napisał(a):
20 sierpnia 2007, 18:47:34
Dziudek, dużo jeszcze masz do opisania tego mootools? Przyznaj się ;>
2.
Dziudek napisał(a):
20 sierpnia 2007, 18:49:37
@Pbnan – 7 części zostało :P Chyba widać wyraźnie w spisie treści kursu :>
3.
Pbnan napisał(a):
20 sierpnia 2007, 18:50:34
Przyznam szczerze, że nie czytam. :P Chociaż za jakiś czas na pewno mi się przyda, a wtedy będę Ci dziękował na kolanach ;-)
4.
Dziudek napisał(a):
20 sierpnia 2007, 18:51:10
@Pbnan – znaczy sugerujesz, że już to się nudne zrobiło xD
5.
Pbnan napisał(a):
20 sierpnia 2007, 18:52:48
Tego nie powiedziałem, o nie. Po prostu nie potrzebuję wykorzystywać JS na tyle w swoich projektach, żebym śledził na bieŻąco i z zapartym tchem Twoje arty, choć zapewne w niedalekiej przyszłości, jak pisałem, będę Ci dziękował, że opisujesz ciągle tę bibliotekę :)
6.
Dziudek napisał(a):
20 sierpnia 2007, 18:54:28
@Pbnan – spoko ;] Co do niedalekiej przyszłości to pewnie na mootools 1.2 się załapiesz ;] BTW bie*ż*ąco ;)
7.
Pbnan napisał(a):
20 sierpnia 2007, 18:55:24
Ajajaj, tak to jest, jak nie można korzystać z Firefoxa :)
Co do mootools 1.2 – kto wie? Ja na pewno nie. ;]
8.
Dziudek napisał(a):
20 sierpnia 2007, 18:56:51
@Pbnan – ale co wie ? Kiedy wydadzą czy że będziesz używał :>
9.
Pbnan napisał(a):
20 sierpnia 2007, 18:57:51
Czy będę korzystał ;)
10.
Dziudek napisał(a):
20 sierpnia 2007, 19:04:21
@Pbnan – wiesz moo 1.2 to już w sumie zupełnie inna bajka – duże zmiany znów, no i w sumie jak ktoś będzie potrzebował czegoś lżejszego to lepsze moo 1.1 ;) Także liczę, że ten kurs nie przestanie być przydatny zaraz po wydaniu moo 1.2 ;)
11.
MatheW napisał(a):
20 sierpnia 2007, 22:57:31
ja tez mam taka nadzieje :P
Mówisz zatem ze w 1.2 spore zmiany zajda.. szkoda bo juz troche umiem ten 1.1 xD
Dodaj komentarz: