Strona 1 z 1

Odliczanie w javascript

Napisane: niedziela, 21 lutego 2016, 05:43
przez mario88
Witam,
znalazłem i trochę zmodyfikowałem ten kod który odlicza do 0:

Code: Zaznacz cały

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Odliczanie</title>
</head>
<body>
<div id="status"></div>
</body>
</html>

Code: Zaznacz cały

function odliczaj(sekundy, elem){

  var statusDiv = document.getElementById(elem);
  statusDiv.innerHTML = "Czekaj: " + sekundy;
  
  if(sekundy < 1){
    clearTimeout(timer)
    statusDiv.innerHTML = "Koniec odliczania.";
  }
  
  sekundy--;
  var timer = setTimeout('odliczaj('+sekundy+', "'+elem+'")', 1000);

}

odliczaj(10, "status");
ale kilku rzeczy nie rozumiem.

1. Dlaczego w tym przypadku ma znaczenie gdzie umieścić dekrementacje sekund, gdy dam ją po funkcji setTimeout to to nie działa, dlaczego?
2. W przypadku gdzie użyta jest funkcja setTimeout nie rozumiem dlaczego są tak pogmatwane te cudzysłowy, podwójne, pojedyńcze i te plusy.
3. Dlaczego w tym wypadku została użyta funkcja setTimeout a nie setInterval? Z tego co wiem to setTimeout wywołuje coś tylko raz a tutaj odlicza ona do 0.

Pozdrawiam

Re: Odliczanie w javascript

Napisane: niedziela, 21 lutego 2016, 12:56
przez Morfidon
Hej,

Zawsze kod JS umieszczaj proszę tutaj:
https://jsfiddle.net/

1. Ponieważ aby odliczanie się zakończyło to do:

Code: Zaznacz cały

  var timer = setTimeout('odliczaj('+sekundy+', "'+elem+'")', 1000);
musisz wysłać zmienną sekundy mniejszą o jeden, inaczej cały czas odpalasz metodę odliczaj z takimi samymi argumentami jakimi została wywołana

2.Podwójne są tam niepotrzebne, jednak musisz to tak zrobić, bo nie chcesz wywołać funkcji odliczaj od razu, tylko chcesz przekazać ją jako argument. Możesz to jednak rozwiązać też inaczej:

Code: Zaznacz cały

setTimeout(function() {
odliczaj(sekundy, elem);

}, 1000);
Jestem pewien, że w którymś momencie w kursie pokaże ten sposób.

3. Możesz użyć setInterval. Są zamienne, używasz tej metody, którą w danej chwili uważasz za łatwiejszą/czytelniejszą do użycia.