Canvas: Jak sprawdzić ile czasu upłyneło od momentu startu animacji?
Opublikowano: 17.05.2022 - tagi: JavaScript Canvas Animacja
Pisząc w Canvas w JavaScript do tworzenia animacji zaleca się używanie funkcji: requestAnimationFrame.
I za pomocą niej dowiemy się, ile upłynęło czasu od jej uruchomienia.
Ile upłynęło czasu od startu animacji?
Poniżej przykład:
let start;
const render = (timestamp) => {
if (start === undefined) {
start = timestamp;
}
const elapsed = parseInt((timestamp - start) / 1000);
console.log(`elapsed: ${elapsed}`);
requestAnimationFrame(render);
}
render();
Więc mamy funkcję render. Posiada ona jeden parametr: timestamp. To znacznik czasu, który będzie przekazany poprzez wywołanie funkcji requestAnimationFrame.
Przy pierwszym wywołaniu przypisujemy zmiennej start wartość. Jest to znacznik czasu pierwszego wywołania animacji. A później w zmiennej elapsed zapisujemy, ile czasu upłynęło od startu. Ponieważ znacznik czasu jest podany w milisekundach więc żeby wiedzieć ile to sekund, dzielimy różnicę między znacznikami przez 1000. 1 sekunda = 1000 milisekund.
Restart animacji
Załóżmy, że chcemy, żeby nasza animacji trwała 3 sekundy. Po upływie tego czasu chcemy zacząć wszystko od nowa. Oto przykład:
let start;
const animationTime = 3;
const render = (timestamp) => {
if (start === undefined) {
start = timestamp;
}
const elapsed = parseInt((timestamp - start) / 1000);
if (elapsed >= animationTime) {
start = timestamp;
}
console.log(`elapsed: ${elapsed}`);
requestAnimationFrame(render);
}
render();
Została dodana nowa zmienna animationTime, która przechowuje liczbę, mówiącą ile czasu ma trwać animacja. Sprawdzamy warunek: elapsed >= animationTime jeśli jest spełniony, to znaczy, że czas animacji się skończył, więc resetujemy znacznik czasu.
Tak na marginesie: nie tworzymy tutaj żadnej animacji. Ale możemy wykorzystać czas, jaki upłynął do stworzenia ciekawych efektów.