Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Timer i wyłączenie setInterval
miccom
post 5.12.2015, 10:48:51
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Dzień dobry smile.gif

Mam taki oto skrypt timera na stronie:

  1. counter = new Array();
  2. function loadTimer(czas,lokalizacjaTimera,idTimera){
  3. var s = czas;
  4. counter.idTimera = setInterval(timer, 1000); // ustawienie funkcji odpowiedajacej za cykliczne wywolanie(co 1 s) funkcji timer()
  5. var min = s / 60; // minuty
  6. var h = min / 60; // godziny
  7. var sLeft = Math.floor(s % 60); // pozostało sekund
  8. var minLeft = Math.floor(min % 60); // pozostało minut
  9. var hLeft = Math.floor(h); // pozostało godzin
  10.  
  11. if (minLeft < 10)
  12. minLeft = "0" + minLeft;
  13. if (sLeft < 10)
  14. sLeft = "0" + sLeft;
  15.  
  16. var out = hLeft + ":" + minLeft + ":" + sLeft; //tekst wyswietlony uzytkownikowi
  17. document.getElementById(""+lokalizacjaTimera+"").innerHTML = out;
  18.  
  19. $("#"+lokalizacjaTimera+"").html(out); // przypisanie tekstu timera do odpowiedniego elementu html
  20. function timer()
  21. {
  22. --s;
  23. var min = s / 60; // minuty
  24. var h = min / 60; // godziny
  25. var sLeft = Math.floor(s % 60); // pozostało sekund
  26. var minLeft = Math.floor(min % 60); // pozostało minut
  27. var hLeft = Math.floor(h); // pozostało godzin
  28.  
  29. if (minLeft < 10)
  30. minLeft = "0" + minLeft;
  31. if (sLeft < 10)
  32. sLeft = "0" + sLeft;
  33. var out = hLeft + ":" + minLeft + ":" + sLeft; //tekst wyswietlony uzytkownikowi
  34. $("#"+lokalizacjaTimera+"").html(out); // przypisanie tekstu timera do odpowiedniego elementu html
  35. if( s <= 0) //licznik osiągnął 0
  36. {
  37. //licznik się wyzerował należy podjąć odpowiednią akcje
  38. clearInterval(counter.idTimera); //zatrzymanie licznika
  39. console.log("kasujemy timer id="+idTimera);
  40. $.ajax({
  41. type : "POST",
  42. dataType : "json",
  43. url : "up.php",
  44. data : {
  45. 'idTimera':idTimera},
  46. success: function(data) {
  47. if (data.error)
  48. {
  49. alert("wystąpił błąd"+data.error);
  50. }
  51. else
  52. {
  53. alert("zadanie zakończone");
  54. }
  55. }
  56. });
  57. return;
  58. }
  59. }
  60. }


A wywołuję go tak:

  1. $(document).ready(function() {
  2. loadTimer(<?php echo $wnetrzePracownika['time'];?>,'timer<?php echo $kolejnyNumer;?>',<?php echo $kolejnyNumer;?>);
  3. });

I jeśli jeden Interwał jest uruchomiony to wszystko pięknie działa i interwał zostaje wyłączony, natomiast jeśli jest kilka uruchomionych to mimo wykonania zadania interwał nadal działa.
I tutaj moje pytanie, jak wyłączyć setInterval jeśli np. są 4 uruchomione?
Proszę o pomoc.

Ten post edytował miccom 5.12.2015, 10:51:48


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
Comandeer
post 5.12.2015, 11:50:52
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Wykorzystuj zmienną counter jako tablicę i dodawaj tam wszystkie timery. Wówczas będziesz miał dostęp do wszystkich i spokojnie se usuniesz. Na razie po prostu dodajesz i nadpisujesz własności statyczne pustej tablicy


--------------------
Go to the top of the page
+Quote Post
miccom
post 5.12.2015, 11:53:26
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


OK, a możesz jaśniej? Bo nie rozumiem co napisałeś?

Tworzę tablicę:
  1. counter = new Array();

A następnie do countera dopisuję idTimera
  1. counter.idTimera = setInterval(timer, 1000);


Czy to nie jednoznaczne z dodaniem do tablicy counter rekordu idTimera?

czy tak to ma wyglądać?
  1. counter[idTimera] = setInterval(timer, 1000);


Ten post edytował miccom 5.12.2015, 11:56:36


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
Comandeer
post 5.12.2015, 11:57:10
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Nie. Tablica dalej jest pusta (możesz to sprawdzić sprawdzając counter.length).

Z racji tego, że w JS tablice są po prostu specyficznym typem obiektów, zapis typu tablica.wlasnosc działa tak samo jak obiekt.wlasnosc.

Jak chcesz coś dodać do tablicy, najłatwiej użyć counter.push


--------------------
Go to the top of the page
+Quote Post
miccom
post 5.12.2015, 12:38:30
Post #5





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


OK.
Nie rozumiem:) ale zrobiłem tak:
  1. counter.push(setInterval(timer, 1000));


i przy
  1. console.log("counter="+ counter.length);


widzę odpowiednio ilości timerów uruchomionych.
Jak teraz jeden z nich zatrzymać?


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
Comandeer
post 5.12.2015, 14:02:52
Post #6





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Hmm… może taki przykład coś Ci pomoże: http://jsfiddle.net/Comandeer/skquys49/


--------------------
Go to the top of the page
+Quote Post
sazian
post 5.12.2015, 14:16:00
Post #7





Grupa: Zarejestrowani
Postów: 1 043
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


Kod
var counter =[];
counter.push(setInterval(function(){console.log('a')}, 1000));
counter.push(setInterval(function(){console.log('b')}, 1000));
counter.push(setInterval(function(){console.log('c')}, 1000));
clearInterval(counter[0]);
Go to the top of the page
+Quote Post
miccom
post 5.12.2015, 17:50:09
Post #8





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


ok sazian, a jeśli nie są po kolei timery?

  1. var counter =[];
  2. counter.push(setInterval(function(){console.log('a')}, 1000));
  3. counter.push(setInterval(function(){console.log('b')}, 1000));
  4. counter.push(setInterval(function(){console.log('c')}, 1000));
  5. clearInterval(counter[0]);

Na końcu usuwamy counter[0], a gdybym chciał te countery ponumerować?
i dać np. counter[1], counter[13], counter[5] itd?

Jeden timer ma np. 1 minutę, drugi 7 minut a trzeci 2 minuty...


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
Comandeer
post 5.12.2015, 18:24:57
Post #9





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


To poczytaj kod z mojego przykładu wink.gif

push zwraca indeks tablicy, więc wystarczy ten fakt wykorzystać (zadeklarować zmienną w funkcji loadTimer)


--------------------
Go to the top of the page
+Quote Post
miccom
post 5.12.2015, 20:08:55
Post #10





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


coś takiego?
  1. pushed = counter.push(setInterval(timer, 1000));


Jak dam potem
  1. clearInterval(pushed);

to nie zatrzymuje mi timera.
Nic nie rozumiem z Twojego przykładu.
Możesz przygotować przykład z kilkoma timerami z różnie upływającym czasem i automatyczne kasowanie timera ( setInterval ) przy wyzerowaniu czasu?

Ten post edytował miccom 5.12.2015, 20:23:20


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
Comandeer
post 5.12.2015, 20:21:50
Post #11





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Kod
clearInterval(pushed - 1);

Miałem napisać, że zwraca długość tablicy. A indeks ostatniego elementu to długość - 1.


--------------------
Go to the top of the page
+Quote Post
miccom
post 5.12.2015, 20:53:36
Post #12





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Ok, poradziłem sobie w taki sposób, że dodałem zmienną tylko dla setInterval równą idTimera.

  1. var timerID = idTimera;
  2. timerID = setInterval(timer, 1000);


Więc aby wyłączyć timer należy tylko wykonać clearInterval
  1. clearInterval(timerID);

I pięknie działa.
Dziękuje za naprowadzenie mnie na rozwiązanie.

Pozdrawiam.


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 02:08