Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery]slideToggle() - problem z kolejkowaniem
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
vonski
Witam.
Robię sobie rozwijane menu za pomocą jQuery, a konkretnie funkcji slideToggle(). Podgląd na żywo dostępny jest tutaj:
http://tomek.rychtyk.pl/workshop/afryka/product.html - chodzi o ten zielony button 'Wybierz opakowanie'.
Niby wszystko wygląda ok - po najechaniu kursorem ładnie rozwija się menu z gramaturami, po "zdjęciu" kursora, menu się zwija. Problem w tym, że jQuery kolejkuje te "najechania" myszką i przez to, jeśli szybko przewinę kursorem w dół i w górę (w obrębie przycisku oczywiście) to owe menu będzie się wysuwać i wsuwać i tak aż do wykonania wszystkich "najechań".
Inna rzecz: jak najadę na 'Wybierz opakowanie' a później szybko na którąś z gramatur (na tyle szybko by menu nie zdążyło się całe rozwinąć) to jest podobny problem do opisanego powyżej.

Kod JS:

  1. $(".pack").hover(function()
  2. {
  3. $(".ribbon").slideToggle("slow");
  4. $(".grams-list li").each(function() { $(this).removeClass("glActive"); });
  5. });


Próbowałem dodać przed wywołaniem slideToggle: stop(true, true) - nie pomogło.
Próbowałem z $(".ribbon").clearQueue(); oraz $(".ribbon").dequeue() - też lipa.
Tzn. w przypadku dwóch ostatnich prób to "pomogło" o tyle, że nie kolejkowało najechań myszką na button, ale za to.. po jednej animacji w ogóle już nie reagowało na hover.
Aha, apropo animacji, to próbowałem też zastąpić slideToggle() funkcją animate() mniej więcej w ten sposób:

  1. $(".ribbon").animate({height:"toggle", opacity:"toggle"}, "slow");


i efekt był ten sam :/

Mam już dość.
Spotkał się ktoś może z tym problemem i ma jakiś skuteczny lek na to?
Z góry dzięki

Pozdrawiam
wookieb
Dla tego elementu dodaj sobie jakąś flagę typu 'inToggleAnimation' która przy wywołaniu toggle ustawiasz na "true". Po zakończeniu animacji na false. Dzięki temu sprawdzisz czy możesz po raz kolejny wywołać slideToggle.

P.s. Flage możesz zapisać używajać .data('klucz', 'wartosc') na elemencie.
batman
[JAVASCRIPT] pobierz, plaintext
  1. $(".ribbon").not(":animated").slideToggle("slow");
[JAVASCRIPT] pobierz, plaintext
To powinno załatwić sprawę.
vonski
Dzięki za odpowiedzi.

Batman: działa super, jeszcze raz dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.