export function animate(func, duration) {
console.assert(typeof func === "function", func);
console.assert(duration > 0, duration);
let start = NaN;
function frame(timestamp) {
if (isNaN(start))
start = timestamp;
else if (timestamp - start >= duration)
return;
func(timestamp - start);
requestAnimationFrame(frame);
}
requestAnimationFrame(frame);
}
import {
easeInOutQuad,
} from "js/Number.js";
export function smoothScroll(targetY, duration) {
console.assert(!isNaN(targetY), targetY);
console.assert(arguments.length < 2 || duration >= 0, duration);
duration = duration || 0;
let startY = window.scrollY();
animate((progress) => {
let y = easeInOutQuad(progress.value, startY, targetY - startY, duration);
window.scroll(0, Math.round(y));
}, duration);
}