UNPKG

@fe6/water-pro

Version:

An enterprise-class UI design language and Vue-based implementation

68 lines (56 loc) 1.43 kB
/** @format */ import { isFunction, isUndefined } from '@fe6/shared'; import { ref, unref } from 'vue'; var easeInOutQuad = function easeInOutQuad(t, b, c, d) { t /= d / 2; if (t < 1) { return c / 2 * t * t + b; } t--; return -c / 2 * (t * (t - 2) - 1) + b; }; var move = function move(el, amount) { el.scrollTop = amount; }; var position = function position(el) { return el.scrollTop; }; export function useScrollTo(_ref) { var el = _ref.el, to = _ref.to, _ref$duration = _ref.duration, duration = _ref$duration === void 0 ? 500 : _ref$duration, callback = _ref.callback; var isActiveRef = ref(false); var start = position(el); var change = to - start; var increment = 20; var currentTime = 0; duration = isUndefined(duration) ? 500 : duration; var animateScroll = function animateScroll() { if (!unref(isActiveRef)) { return; } currentTime += increment; var val = easeInOutQuad(currentTime, start, change, duration); move(el, val); if (currentTime < duration && unref(isActiveRef)) { requestAnimationFrame(animateScroll); } else { if (callback && isFunction(callback)) { callback(); } } }; var run = function run() { isActiveRef.value = true; animateScroll(); }; var stop = function stop() { isActiveRef.value = false; }; return { start: run, stop: stop }; }