Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Opóźnienie wykonywania skryptu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Jarod
Mam napisaną funkcję w JS i chciałbym opóźnić jej działania. Czyli funkcja wykonuje co ma wykonać i kończy swoje działanie po dodatkowych n sekundach. n jest losowane z przedziału od 2 do 6. Pomoże ktoś?

Znalazłem jak wylosować liczbę z przedziału od 0 do n, ale nie wiem jak z dwóch przedziałów i jak zatrzymać wykonywanie funckji na x sekund..
Grzyw
Jeżeli wiesz, jak wylosować liczbę z przedziału (0,n) to wylosuj liczbę z przedziału (0,4) i dodaj do wylosowanej wartości 2.

(0,4) + 2 = (2,6)
Jarod
W sumie masz rację smile.gif Chyba dziś jestem zakręcony.

Wiecie jak zatrzymać wykonywanie skyptu na x sekund? Próbowałem z setTimeout ale nie działa. Kombinowałem także z pętlą ale działa nie tak jak chcę. Funkcja najpierw powinna wykonać zadanie i przed samym returnem zatrzymać się na x-sekund.

Z pętlą jest tak (pomimo, że jest umieszczona po zadaniach), że najpierw wykonuje się pętla a później zadania, przykład:
Kod
function showOverlay()
{
    document.getElementById('loader').style.display='block';

    var now = new Date();
    var exitTime = now.getTime() + 5000;
    
    while (true)
    {
        now = new Date();
        if (now.getTime() > exitTime) return;
    }
}
ebnott
niby czemu setTimeout nie dziala? powinno rozwiazac problem
DavidPL
Ponieważ setTimeout odpala kod po określonym czasie, a nie powoduje wstrzymania pracy skryptu.
Niestety nie wiem jak wstrzymać skrypt JS na określony czas.
Jarod
Cytat(ebnott @ 22.03.2008, 20:34:14 ) *
niby czemu setTimeout nie dziala? powinno rozwiazac problem


Ponieważ nie chcę wywołać funkcji po czasie, tylko opóźnić jej zakończenie.
ebnott
chodzilo mi o wstawienie setTimeout do funkcji, a przed return. Jasne?
Jarod
Cytat(ebnott @ 22.03.2008, 21:19:01 ) *
chodzilo mi o wstawienie setTimeout do funkcji, a przed return. Jasne?

Jasne? A sprawdzałeś swój pomysł? Bo ja to sprawdzałem.
Zrób dwie funckje A() i B(). Funkcja A() zmienia pewne style na stronie i wywołuje funckję b() za pomocą setTimeout(). Funcja A(0 wywoływana jest jako zdarzenie onsubmit. Problem w tym, że dopóki fukncja B() nie zostanie wywołana, to funkcja A(0 tak jakby się nie wywołuje.
lord_t
Wyszperane w googlu:

Kod
function sleep(duration) {
    (d = new Date()).setTime(d.getTime() + duration);
    while(new Date() < d);
}


Duration to czas w milisekundach (tak mi się wydaje;) ): 1s = 1000 ms
Jarod
@lord_t: Widziałem tego tupu skrypty 9też googlowałem). Problem w tym, że obciążają procka w 100%.
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.