#Basic Animation
function animate(timing, draw, duration) {
return new Promise((resolve) => {
const start = performance.now();
requestAnimationFrame(function _animate(time) {
let timeFraction = (time - start) / duration;
if (timeFraction > 1) timeFraction = 1;
const progress = timing ? timing(timeFraction) : timeFraction;
draw(progress);
if (timeFraction < 1) {
requestAnimationFrame(_animate);
} else {
resolve();
}
});
});
}