Odliczanie w javascript

Dział poświęcony JavaScriptowi - tworzeniu dynamicznym stron WWW.
mario88
Stały Bywalec
Stały Bywalec
Posty: 128
Dołączył(a): sobota, 14 marca 2015, 19:04

Odliczanie w javascript

Post 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
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Odliczanie w javascript

Post 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.
Post Reply