UNPKG

comic-plus

Version:

<p align="center"> <img width="200px" src="./logo.png"/> </p>

45 lines (44 loc) 1.14 kB
import "../../../utils/config.mjs"; import "vue"; import { isWindow } from "../../../utils/typescript.mjs"; import { raf, caf } from "../../../utils/client.mjs"; function getNextScrollTop(t, b, c, d) { const cc = c - b; t /= d / 2; if (t < 1) { return cc / 2 * t * t * t + b; } return cc / 2 * ((t -= 2) * t * t + 2) + b; } function animateScrollTo(container, from, to, duration) { const startTime = Date.now(); let handle; const scroll = () => { const timestamp = Date.now(); const time = timestamp - startTime; const nst = getNextScrollTop(time > duration ? duration : time, from, to, duration); if (isWindow(container)) { container.scrollTo(window.pageXOffset, nst); } else { container.scrollTop = nst; } if (time < duration) { handle = raf(scroll); } }; scroll(); return () => { handle && caf(handle); }; } function elAnimation(el, duration) { const time = 1e3 + (duration ?? 0); el.classList.add("cu-anchor--animation"); setTimeout(() => { el.classList.remove("cu-anchor--animation"); }, time); } export { animateScrollTo, elAnimation };