moo.fx.utils.js

10 kwietnia, 2007

Zapoznaliśmy się z podstawowymi efektami biblioteki moo.fx – pora przejść do bardziej zaawansowanych efektów, które będą chyba najbardziej przydatne w praktyce – chodzi mi tutaj o operacje płynnej zmiany szerokości, wysokości i przezroczystości, które dają możliwość rozwijania i zwijania za pomocą jednej funkcji.

Plik moo.fx.utils.js zawiera 3 klasy:

  • Fx.Height
  • Fx.Width
  • Fx.Opacity

Klasy te umożliwiają łatwe dodanie operacji modyfikowania parametrów danego elementu. Każda z nich ma do dyspozycji dwie funkcje – toggle() służącą do zmiany danej wielkości z jednego stanu do drugiego (na przykład ukrycie elementu poprzez zmianę właściwości opacity z 1 do 0) oraz funkcję show(), która pokazuje dany element od razu bez wykonywania efektu.

Zapis w wypadku wszystkich trzech klas jest taki sam i wygląda następująco:

efekt = new Fx.nazwa_klasy(‘nazwa_elementu’,{opcje dodatkowe});

Wykonanie efektu następuje przez wywołanie funkcji:

efekt.toggle();

Myślę, że składnia powinna być już całkowicie zrozumiała, dlatego pokażę od razu przykłady dla wszystkich trzech klas bez dokładniejszych opisów, by się ciągle nie powtarzać:

efekt = new Fx.Height(‘test’,{duration: 500});

PRZYKŁAD 1

efekt = new Fx.Width(‘test’,{duration: 500});

PRZYKŁAD 2

efekt = new Fx.Opacity(‘test’,{duration: 500});

PRZYKŁAD 3

Dwie uwagi natury technicznej:

Jeżeli nasz element, na którym wykonujemy operację Fx.Width lub Fx.Height ma ustawione wartości typu padding czy border, to należy pamiętać, że element ten nie zostanie zwinięty całkowicie, a jedynie do wysokości / szerokości jaka jest równa sumie paddingów / obramowań w pionie lub w poziomie, a na dodatek nie będzie go można rozwinąć gdyż element taki jest traktowany jako element posiadający wysokość i przy ponownym kliknięciu będzie następowała próba jego dalszego zwinięcia:

PRZYKŁAD 4

Jeżeli chcemy by zwijany i rozwijany element miał obramowanie i padding, lepiej skorzystać z klasy Fx.Style lub Fx.Styles – wtedy mamy pełną kontrolę nad rozmiarem elementu, oraz jego właściwościami, jednak wymaga to znacznie więcej kodu JavaScript – wniosek z tego nasuwa się jeden – jeżeli chcemy zwijać i rozwijać element bez paddingu i obramowania to klasy Fx.Height i Fx.Width są do tego najlepsze, natomiast gdy chcemy mieć kontrolę nad naszym elementem i posiada on wyżej wymienione właściwości to należy skorzystać z klasy Fx.Style lub Fx.Styles.

Druga kwestia dotyczy zawartości elementów i klasy Fx.Height – jeżeli są one puste to po ich zwinięciu, nie rozwiną się one ponownie, ponieważ wysokość elementu zależy tutaj od jego zawartości (działa to też w drugą stronę – jeżeli element posiada więcej treści niż widać na początku (dzięki zastosowaniu właściwości overflow: hidden) to element zostanie później rozwinięty tak by pokazać całą swoją zawartość):

PRZYKŁAD 5

Warto jeszcze zauważyć, że gdy klikniemy przycisk aby zwinąć element to w Firefoxie i Operze zniknie on całkowicie, a w Internet Explorerze pozostanie po nim wolne miejsce. Przejdź do opisu pliku accordion.js

Komentarze do wpisu "moo.fx.utils.js":

1. pietia napisał(a):
07 stycznia 2008, 13:45:34

Fajna sprawa :)
a da się odwrócić proces?
Taż żeby dzieki tej funkcji cos pokazać, a przy ponownym kliknięciu ukryć?

2. Dziudek napisał(a):
07 stycznia 2008, 17:39:52

@pietia – oczywiście, że się da ;)

Dla przykładu opacity – w stylu CSS nadajemy elementowi display:none
następnie przy zdarzeniu onload wykonujemy operację:
$("elementID").style.display = "block";
Po czym wykonujemy operację:
efekt.hide();

Gdzie efekt to oczywiście instancja klasy Fx.Opacity ;)

3. requish napisał(a):
16 stycznia 2009, 17:38:46

Hej, w prawdzie jestem laikiem… ale przyklad 1 nie zadziałał jak nalezy pod IE6, pod FF działa jak trzeba… no wiec postanowilem pogmerać w skrypcie i udało mi sie to naprawić:) a mianowicie, powinno byc tak: toggle: function(){ if (this.element.offsetHeight > 1) return this.custom(this.element.offsetHeight, 1); else return this.custom(0, this.element.scrollHeight); },

A było tak: toggle: function(){ if (this.element.offsetHeight > 0) return this.custom(this.element.offsetHeight, 0); else return this.custom(0, this.element.scrollHeight); },

Dzieki temu działa w IE6:) ...może sie komuś przyda ta informacja.

Dodaj komentarz:

Textile Lite włączony ( szczegółowy opis znaczników ):
*strong* | # lista numerowana | * lista wypunktowana | _em_ | __italic__ | "link":http:// | bq. cytat.