Próbuję stworzyć efekt, w którym strona się ładuje, a po 5 sekundach komunikat o powodzeniu na ekranie znika lub przesuwa się w górę.
Jak mogę to osiągnąć?
Wbudowany javascript setTimeout .
setTimeout(
function()
{
//do something special
}, 5000);
AKTUALIZACJA : chcesz poczekać, aż strona się załaduje, więc umieść ten kod w $(document).ready(...);
skrypcie.
AKTUALIZACJA 2 : jquery 1.4.0 wprowadziło tę .delay
metodę. Sprawdź to . Zauważ, że .delay działa tylko z kolejkami efektów jQuery.
setTimeout
.Użyj normalnego timera javascript:
Poczeka to 5 sekund po zakończeniu DOM. Jeśli chcesz poczekać, aż strona rzeczywiście się pojawi,
loaded
musisz użyć tego:EDYCJA: W odpowiedzi na komentarz PO pytając, czy istnieje sposób, aby to zrobić w jQuery i nie używać
setTimeout
odpowiedzi, nie. Ale jeśli chcesz uczynić go bardziej „jQueryish”, możesz go zawinąć w następujący sposób:Możesz to nazwać tak:
źródło
Natknąłem się na to pytanie i pomyślałem, że przedstawię aktualizację na ten temat. jQuery (wersja 1.5 +) zawiera
Deferred
model, który (pomimo nieprzestrzegania specyfikacji Promises / A aż do jQuery 3) jest ogólnie uważany za wyraźniejszy sposób podejścia do wielu problemów asynchronicznych. Wdrożenie$.wait()
metody wykorzystującej to podejście jest szczególnie czytelne:A oto jak możesz go użyć:
Jeśli jednak po wstrzymaniu chcesz wykonywać akcje tylko na jednym zaznaczeniu jQuery, powinieneś używać natywnego jQuery,
.delay()
który, jak sądzę, również używa opcji Odroczony pod maską:źródło
Umieść swój kod wewnątrz
{ }
itp.
źródło
Używam tego do nakładki wiadomości, którą można zamknąć natychmiast po kliknięciu lub wykonuje automatyczne zamykanie po 10 sekundach.
źródło
.delay()
i może być zagnieżdżonaBiblioteka Podkreślenie oferuje również funkcję „opóźnienie”:
źródło
Na podstawie odpowiedzi Joeya wpadłem na zamierzone (przez jQuery, czytaj o „kolejce”) rozwiązanie.
Jest nieco zgodny ze składnią jQuery.animate () - pozwala łączyć się z innymi funkcjami fx, obsługuje „slow” i inne jQuery.fx.speeds, a także jest w pełni jQuery. I będą obsługiwane tak samo jak animacje, jeśli je zatrzymasz.
Pole testowe jsFiddle z większą ilością zastosowań (np. popisywanie .stop ()), można znaleźć tutaj .
rdzeniem rozwiązania jest:
całość jako wtyczka, obsługująca użycie $ .wait () i $ (..). wait ():
Uwaga: ponieważ czekanie dodaje się do stosu animacji, $ .css () jest wykonywany natychmiast - jak się zakłada: oczekiwane zachowanie jQuery.
źródło
źródło
Zdaj sobie sprawę, że to stare pytanie, ale napisałem wtyczkę, aby rozwiązać ten problem, który może być przydatny dla kogoś.
https://github.com/madbook/jquery.wait
pozwala ci to zrobić:
źródło