comic-plus
Version:
<p align="center"> <img width="200px" src="./logo.png"/> </p>
45 lines (44 loc) • 1.29 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../../utils/config.js");
require("vue");
const typescript = require("../../../utils/typescript.js");
const client = require("../../../utils/client.js");
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 (typescript.isWindow(container)) {
container.scrollTo(window.pageXOffset, nst);
} else {
container.scrollTop = nst;
}
if (time < duration) {
handle = client.raf(scroll);
}
};
scroll();
return () => {
handle && client.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);
}
exports.animateScrollTo = animateScrollTo;
exports.elAnimation = elAnimation;