promise-animate
Version:
Use request animation frame with promises and pleasure
23 lines (22 loc) • 784 B
JavaScript
export default (function (_a) {
var duration = _a.duration, update = _a.update, cancellationToken = _a.cancellationToken;
return new Promise(function (resolve) {
var startTimestamp = Date.now();
var endTimestamp = startTimestamp + duration;
var loop = function () {
var now = Date.now();
if (cancellationToken && cancellationToken.cancel) {
resolve();
return;
}
if (now >= endTimestamp) {
update(1);
resolve();
return;
}
update(Math.min(1, (now - startTimestamp) / duration));
requestAnimationFrame(loop);
};
requestAnimationFrame(loop);
});
});