Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] Jak wywołać funkcję tylko na określony czas?
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Vitoss
W jaki sposób wywołać funkcję w JS tylko na określony czas? Mam kod:

Kod
function handle(delta) {
    if (delta < 0)

        JAKIEŚ WYWOŁANIE

    else

        NASTĘPNE WYWOŁANIE

}

Problem jest jednak taki, że skrypt wywołuje funkcję, której nie da się zatrzymać. Jest kod zatrzymujący funkcję, jednak nie da się zwrócić ponownie wartości zerowej - delta po wykonaniu akcji ze skryptu jest albo 1 albo -1 i dlatego nie ma gdzie wkleić fragmentu zatrzymującego funkcji. Nie ma jak wywołać delta = 0. Całość ogólnie odpowiada za scrollowanie myszką, na bazie tego skryptu.

Rozwiązania widzę takie: albo wywołanie funkcji tylko na krótki fragment (rozwiązanie trochę na około) albo modyfikacja warunków pod takim kątem, aby wywoływały wartości zerowe, wtedy wkleiłoby się skrypt zatrzymujący akcję.

W JS nie jestem zbytnio zorientowany, dlatego może się to wydawać proste, jednak ciężko mi znaleźć działające rozwiązanie - już praktycznie pół dnia mi na to zeszło...
chomiczek
a nie łatwiej.. liczyć czas?
na początku ustawiasz sobie zczytany czas+ile ma trwać a potem przy każdym przetworzeniu funkcji sprawdzasz czy aktualny czas jest mniejszy od ustawionego czasu zakończenia.. jeśli jest mniejszy przerywasz wykonywanie funkcji czy co tam chcesz?
Vitoss
funkcję mogłoby wykonywać np. tylko przez 500ms, jednak nie wiem jak zastosować to od strony kodu... mógłbyś mi pomóć?

myślałem, że jest w JS możliwość jak np. setTimeout - tylko wykonuje funkcję przez dany czas, a potem wywołuje inną, zatrzymującą


to na czym się opieram, świetnie się sprawdza przy onMouseOver oraz onMouseOut - tu świetnie działa, ale z tym scrollem już tak łatwo nie jest
chomiczek
coś na szybkiego z palca
  1. var currentTime = new Date();
  2. var czas = currentTime.getTime();
  3. czas = czas + 1000;
  4. function jakas() {
  5. aktualny = currentTime.getTime();
  6. if (aktualny>czas) {
  7. //przerwij wykonywanie
  8. }
  9. else {
  10. //wykonuje co ma wykonać, a potem od nowa funkcja
  11. jakas();
  12. }
  13. }
Pawel_W
Cytat(chomiczek @ 22.07.2009, 17:55:49 ) *
coś na szybkiego z palca
  1. var currentTime = new Date();
  2. var czas = currentTime.getTime();
  3. czas = czas + 1000;
  4. function jakas() {
  5. aktualny = currentTime.getTime();
  6. if (aktualny>czas) {
  7. //przerwij wykonywanie
  8. }
  9. else {
  10. //wykonuje co ma wykonać, a potem od nowa funkcja
  11. jakas();
  12. }
  13. }

coś takiego już jest i nazywa się setTimeout()
zegarek84
Cytat(Pawel_W @ 24.07.2009, 11:32:38 ) *
coś takiego już jest i nazywa się setTimeout()

nie - poczytaj co to jest setTimeout() - jakie wywołuje działąnie a potem przyjrzyj się kodowi na który tylko rzuciłem okiem a nie testowałem...
[edit]
taka mała podpowiedź - tutaj w ciągu tej jednej sekundy funkcja wykona się tyle razy ile zdąży - na ile jej optymalny kod pozwoli bądź szybkość kompa ;p - ale to nie będzie trwało dłużej niż 1s - no może nie do końca gdyż lekko może przekroczyć w ostatnim warunku te 1000ms ;p - ale szkoda się wgłębiać...
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.