ckgl/node_modules/vant/es/tabs/utils.mjs
2024-12-21 13:52:42 +08:00

50 lines
1.2 KiB
JavaScript

import { raf, cancelRaf } from "@vant/use";
import { getScrollTop, setScrollTop } from "../utils/index.mjs";
function scrollLeftTo(scroller, to, duration) {
let rafId;
let count = 0;
const from = scroller.scrollLeft;
const frames = duration === 0 ? 1 : Math.round(duration * 1e3 / 16);
let scrollLeft = from;
function cancel() {
cancelRaf(rafId);
}
function animate() {
scrollLeft += (to - from) / frames;
scroller.scrollLeft = scrollLeft;
if (++count < frames) {
rafId = raf(animate);
}
}
animate();
return cancel;
}
function scrollTopTo(scroller, to, duration, callback) {
let rafId;
let current = getScrollTop(scroller);
const isDown = current < to;
const frames = duration === 0 ? 1 : Math.round(duration * 1e3 / 16);
const step = (to - current) / frames;
function cancel() {
cancelRaf(rafId);
}
function animate() {
current += step;
if (isDown && current > to || !isDown && current < to) {
current = to;
}
setScrollTop(scroller, current);
if (isDown && current < to || !isDown && current > to) {
rafId = raf(animate);
} else if (callback) {
rafId = raf(callback);
}
}
animate();
return cancel;
}
export {
scrollLeftTo,
scrollTopTo
};