Timers & animations
Animatie
= updaten van een beeld in opeenvolgende beelden of frames
Timing
3 belangrijke timing methods in JavaScript:
setTimeout()
: code uitvoeren na vertragingsetInterval()
: code herhaaldelijk uitvoeren
requestAnimationFrame()
: synchroniseert met de browser's refresh rate
Éénmalige vertragingen
setTimeout()
setTimeout(() => {
// code
}, 1000);
= Functie die een functie uitvoert na een ingestelde tijd
Voorbeelden setTimeout()
setTimeout(() => {
const modal = document.querySelector("#modal");
modal.style.display = "block";
}, 2000);
clearTimeout()
const myTimeout = setTimeout(() => {}, 5000);
clearTimeout(myTimeout);
= Annuleert een eerder geplande setTimeout()
setTimeout()
hebt gedeclareerd.Voorbeelden clearTimeout()
const timeoutId = setTimeout(() => {
alert("Ben je er nog?");
}, 60000);
document.addEventListener("click", () => {
clearTimeout(timeoutId);
});
Acties herhalen
setInterval()
setInterval(() => {
// code
}, 1000);
= Functie die een functie herhaaldelijk uitvoert met een vaste intervaltijd
Voorbeelden setInterval()
const clockElement = document.querySelector("#clock");
function updateClock() {
const now = new Date();
clockElement.textContent = now.toLocaleTimeString();
}
setInterval(updateClock, 1000);
clearInterval()
const intervalId = setInterval(() => {}, 1000);
clearInterval(intervalId);
= Stopt een lopende setInterval()
functie.
setInterval()
hebt gedeclareerdVoorbeelden clearInterval()
let countdown = 10;
const element = document.getElementById("countdown");
const intervalId = setInterval(() => {
countdown--;
element.textContent = `Nog ${countdown} seconden...`;
if (countdown <= 0) {
element.textContent = "Start! 🚀";
clearInterval(intervalId);
}
}, 1000);
Performance
Frames
setTimout()
& setInterval()
zijn niet ideaal voor animaties
Oplossing
✨requestAnimationFrame()✨
Smooth animations
requestAnimationFrame()
= Vraagt de browser om een functie uit te voeren op het juiste moment voor het volgende frame
function animate() {
// Code die iets doet
// ...
requestAnimationFrame(animate);
}
animate();
1️⃣
2️⃣
3️⃣
Named function
Named function
Geef de functienaam mee als parameter
requestAnimationFrame()
let x = 0;
const balloon = document.querySelector("#balloon");
function animate() {
balloon.style.left = `${x}px`;
x += 1; // Even snel als framerate
requestAnimationFrame(animate);
}
animate();
Voorbeeld: elke frame een element 1px verplaatsen
Timestamp parameter
requestAnimationFrame()
Timestamp parameter
const box = document.getElementById("box");
let lastTime = 0;
function animate(timestamp) {
if (!lastTime) lastTime = timestamp;
const deltaTime = timestamp - lastTime;
const leftPos = parseFloat(box.style.left) + deltaTime * 0.1
box.style.left = leftPos + "px";
lastTime = timestamp;
requestAnimationFrame(animate);
}
animate();
cancelAnimationFrame()
Stopt (of pauzeert) een lopende animatie die gestart is met requestAnimationFrame()
let animationId;
let x = 0;
function animate() {
console.log(`Positie: ${x}`);
x += 1;
animationId = requestAnimationFrame(animate);
}
animate();
cancelAnimationFrame(animationId);
cancelAnimationFrame()
Enhancement zodat de animatie minstens 3 seconden wordt uitgevoerd
let animationId;
let x = 0;
function animate() {
console.log(`Positie: ${x}`);
x += 1;
animationId = requestAnimationFrame(animate);
}
animate();
const stopAnimation = () => cancelAnimationFrame(animationId);
setTimeout(stopAnimation, 3000); // Stopt na 3 sec
CSS vs. JS
CSS vs. JS
JS: Welke timer gebruik je wanneer?
setTimeout()
clearTimeout(id)
setInterval()
clearInterval(id)
requestAnimationFrame()
cancelAnimationFrame(id)