setInterval()

Wywołuje funkcję cyklicznie, co podany odstęp czasu, aż do zatrzymania przez clearInterval().

Zwraca
Identyfikator interwału do użycia w clearInterval().
Na tej stronie

Przykład

#
JavaScript
let seconds = 3

const countdown = setInterval(() => {
  console.log(seconds)
  seconds -= 1

  if (seconds === 0) {
    clearInterval(countdown)
    console.log('Start misji!')
  }
}, 300)
Konsola
3
2
1
Start misji!

Definicja i zastosowanie

#

Funkcja setInterval() uruchamia podaną funkcję wielokrotnie, za każdym razem po upływie tego samego odstępu w milisekundach. Pierwsze wywołanie następuje dopiero po pierwszym odstępie, a nie od razu.

Zwraca identyfikator, który przekazujesz do clearInterval(), żeby zatrzymać powtarzanie. Bez tego funkcja będzie wywoływana w nieskończoność, nawet gdy nikt już nie potrzebuje jej wyników. Zapomniany interwał to częsta przyczyna wycieków pamięci i trudnych do znalezienia błędów.

Odstęp nie jest idealnie dokładny. Gdy przeglądarka jest zajęta albo karta działa w tle, wywołania mogą się opóźniać. W licznikach czasu obliczaj więc upływ na podstawie Date.now(), a do animacji używaj requestAnimationFrame().

Składnia

#
Składnia
const intervalId = setInterval(callback, delay)
setInterval(callback, delay, arg1, arg2, …)

clearInterval(intervalId)

Parametry

#
  • callback

    function

    Funkcja wywoływana co delay milisekund.
  • delay

    liczba

    Odstęp między wywołaniami w milisekundach.
  • arg1…argN

    opcjonalne

    Argumenty przekazywane do funkcji przy każdym wywołaniu.

Więcej przykładów

#
Postęp z zatrzymaniem na 100%
JavaScript
let progress = 0

const loader = setInterval(() => {
  progress += 25
  console.log(`Ładowanie: ${progress}%`)
  if (progress >= 100) clearInterval(loader)
}, 200)
Konsola
Ładowanie: 25%
Ładowanie: 50%
Ładowanie: 75%
Ładowanie: 100%
Łańcuch setTimeout() zamiast interwału
JavaScript
let attempt = 1

function checkStatus() {
  console.log(`Sprawdzam status, próba ${attempt}`)
  attempt += 1
  if (attempt <= 3) setTimeout(checkStatus, 200)
}

checkStatus()
Konsola
Sprawdzam status, próba 1
Sprawdzam status, próba 2
Sprawdzam status, próba 3

Kolejne wywołanie jest planowane dopiero po zakończeniu poprzedniego, więc wywołania nigdy się nie nakładają. To dobry wzór przy odpytywaniu serwera, którego odpowiedź może trwać różnie długo.

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Zawsze zapisuj identyfikator i wywołuj clearInterval(), gdy powtarzanie nie jest już potrzebne, np. po zakończeniu odliczania lub opuszczeniu widoku.
  • Jeśli pojedyncze wywołanie może trwać dłużej niż odstęp (np. zapytanie do serwera), użyj łańcucha setTimeout(), żeby wywołania się nie nakładały.
  • Do płynnych animacji używaj requestAnimationFrame(), a nie setInterval().

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.