Mootools 1.1 - Scroller.js
28 sierpnia, 2007
Pora zakończyć tematykę przewijania elementów z użyciem frameworka mootools. Dziś skupimy się na kursorze myszki i pluginie scroller.js. Ów plugin zawiera jak się pewnie domyślacie klasę Scroller, która służy do przewijania elementów, których zawartość jest po części ukryta dzięki atrybutowi overflow. Klasa ta odczytuje położenie kursora myszki i na tej podstawie przewija dany element. Pewnie każdy kojarzy pewną funkcjonalność Google Maps pozwalającą na "chwycenie" w pewnym punkcie mapki i jej przewijanie za pomocą poruszania kursorem do czasu "puszczenia" mapy. Na uzyskanie tego typu efektów pozwala właśnie klasa Scroller.
Składnia tej klasy jest typowa dla klas efektów:
var scroll = new Scroller(element,{opcje});
Jak widzimy, żadnych nowości w tym zakresie. Mamy do dyspozycji dwie opcje, jedno zdarzenie, a dodatkowo klasa Scroller posiada dwie kluczowe metody - start i stop. Ale zacznijmy od obiektu opcji:
- area - jest to podawany w pikselach rozmiar swego rodzaju "ramki", która otacza od wewnątrz nasz przewijany element - jeżeli kursor znajdzie się nad jej obszarem to dopiero wtedy może zacząć przewijać element. Jest to więc grubość aktywnego obszaru przewijanego elementu. Domyślna wartość to 20 pikseli.
- velocity - opcja ta określa prędkość z jaką następuje przewijanie - domyślna wartość to 1.
- onChange - zdarzenie, które występuje w momencie przesunięcia kursora nad obszarem aktywnym określonym (jeśli chodzi o rozmiar) w opcji area. Domyślnie ma przypisaną pewną funkcję więc trzeba ją podmienić tak by nie uniemożliwić działania klasy Scroller.
Jeśli chodzi o wspomniane metody - pierwsza (start) służy do rozpoczęcia przewijania (pod warunkiem, że kursor porusza się nad obszarem aktywnym, poza nim nic się nie stanie), a druga (stop) do jego przerwania.
Mamy zasadniczo dwie główne możliwości wykorzystania tych metod, które przedstawię w przykładach.
Na początek przyjmijmy, że mamy element typu div z mapką w środku - mapka jest dużo większa od elementu nadrzędnego więc nie mieści się cała w tymże elemencie. Trzeba jakoś zorganizować przewijanie. Zaczniemy od wersji gdzie aby móc przewijać trzeba przytrzymać lewy przycisk myszy.
Tworzymy naszą instancję klasy Scroller i ustawiamy grubość obszaru aktywnego na 200 pikseli:
var przewijanie = new Scroller("przewijany",{area: 250});
I to już właściwie jedna trzecia całego kodu :) Teraz tylko dodajemy do przewijanego elementu zdarzenia mouseup i mousedown wraz z odpowiednimi funkcjami:
$("przewijany").addEvent("mousedown", function(){przewijanie.start();});
$("przewijany").addEvent("mouseup", function(){przewijanie.stop();});
Jak widać przy wciśnięciu przycisku myszy rozpoczynamy przewijanie, a kończymy je wraz z puszczeniem tego przycisku.
Oczywiście cały kod ląduje w zdarzeniu onload obiektu window (będę to powtarzał do upadłego, aż niektórzy przestaną popełniać ten irytujący błąd :P ) i już możemy oglądać nasz kod w akcji:
Proste ? Drugi przykład będzie bardzo podobny - zmieniają się tylko zdarzenia i obszar aktywny:
var przewijanie = new Scroller("przewijany",{area: 100, velocity: 1});
$("przewijany").addEvent("mouseover", function(){przewijanie.start();});
$("przewijany").addEvent("mouseout", function(){przewijanie.stop();}
Jak widzimy w drugim wypadku aktywacja przewijania następuje w momencie znalezienia się kursora nad przewijanym elementem, a kończy się po opuszczeniu go przez kursor. Zmniejszyłem obszar aktywny bo im byłby on większy tym bardziej irytujące byłoby przewijanie :)
I kod w akcji:
Plugin scroller.js jest jak mogliście zauważyć prościutki w użytku, a daje przyjemne efekty ;) I to już wszystko co mogłem napisać o przewijaniu elementów w mootools. W następnej części kursu zajmiemy się pluginem sortables.js związanym z techniką drag'n'drop.
Komentarze do wpisu "Mootools 1.1 - Scroller.js":
1.
off napisał(a):
28 sierpnia 2007, 18:54:30
Pierwszy przykład sie tnie :p
2.
cimlik napisał(a):
28 sierpnia 2007, 19:01:16
Szkoda tylko, że tak się krzaczy przy jednoczesnym przesuwaniu kursorem i kółkiem myszki :).
PS: Dodaj do przykładów linki do odpowiednich części kursu, bo trochę uciążliwe jest ponowne szukanie wpisu po przypadkowym zamknięciu zakładki ;]. Mógłbyś też zrobić pod koniec kursu spis wszystkich przykładów ;].
3.
Dziudek napisał(a):
28 sierpnia 2007, 19:09:44
off – gdzie :>
cimlik – krzaczy się bo są widoczne suwaki, zostawiłem je żeby było widać jak to przewijanie idzie – w docelowym projekcie ustawia się
overflow:hiddeni po problemie ;) Co do reszty rzeczy – raczej mi życia na to nie starczy :P4.
lopez napisał(a):
29 lutego 2008, 12:42:47
powiedzmy, ze scrollujemy obrazek o wymiarach 1200px x 1200px w divie o wymiarach 400px x 400px. Jak odczytać jakies parametry przesuniecia po obrazku?
5.
Dziudek napisał(a):
01 marca 2008, 00:38:45
@lopez – poczytaj o pliku Element.Dimensions.js ;) Chodzi mi dokładniej o metodę getSize – masz tam m.in.: takie parametry jak scroll, scrollSize :)
6.
lopez napisał(a):
04 marca 2008, 15:42:28
Hej Dziudek. Zanim napisalem, poczytalem o tym. Niestety nie znalazlem tego, czego mi trzeba :/
scroll mowi mi tylko jak bardzo przewinalem diva (400×400), czyli maxymalne wartosci to wlasnie x=400, y=400.
scrollSize podaje mi tak naprawde wymiary obrazka czyli x=1200, y=1200. Niestety nie znalazlem nic, co pozwalaloby odczytac, ile mojego obrazka zostalo „przescrollowane”, czyli max x=1200 i max y=1200 :(
Tak czy inaczej dzieki za konkretny kurs :)
Dodaj komentarz: