Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Sekwencyjne wykonywanie .animate() a zyzucie procesora
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Sajrox
Witam,
Otóż mam pewien problem z funkcją animate() w jQuery.
Chodzi o to że napisałem pewien widget które działa sekwencyjnie, czyli wykonuje w kółko funkcje .animate(). Niestety zauważyłem że sposób tez obciaża mocno procesor.
Dokładnie chodzi o przewijany pasek z wiadomościami (coś jak na tvn24), gdy pasek tez przejdzie caly ekran i przestanie być widoczny koncze działanie skryptu, w innym wypadku przesuwam go dalej co 800px. aż dojdzie do końca.

Kod wyglądam niej więcej tak:

  1. function scrollLeft() {
  2. $('#pasek').animate({
  3. left: '-=800'
  4. }, 300000, "linear", function(){
  5. // gdy pasek jeszcze nie jest za ekranem przegladarki, ponownie uruchamiamy funkcje scrollLeft() w celu dalszego przewijania aż dojdzie do końca
  6. var lastOffset = $('#pasek').find('li:last').offset();
  7. if (lastOffset.left >= 0) {
  8. scrollLeft();
  9. }
  10. else {
  11. // gdy pasek wyjdzie za obszar przeglądarki, konczymy dzialanie i ukrywamy go
  12. $('#pasek').fadeOut();
  13. $('#pasek').html('');
  14. }
  15. });
  16. }
  17.  
  18. scrollLeft();


czy można to jakoś zoptymalizować?
Kemsan
Hm, spróbuj tak - określ jaki width mają razem wszystki elemenety - czyli jaką szerokość ma cały pasek i taką odległość ustal w funkcji animate(), zastąpisz to -=800 wygenerowaną wartością width paska. Dzięki czemu funkcje wyowałasz tylko raz. Co do warunku i funkcji zawartych w else, usuń element zamiast go ukrywać.
+ Jeszcze taka rada: funkcje w jQuery możesz wykonywać w jednym ciągu tzn: $('#pasek').fadeOut().html(''); 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.