qt-public-ui
Version:
新设计规范下业务组件库
35 lines • 1.16 kB
JavaScript
import raf from 'raf';
import getScroll from './getScroll';
import { easeInOutCubic } from './easings';
export default function scrollTo(y, options) {
if (options === void 0) {
options = {};
}
var _options = options,
_options$getContainer = _options.getContainer,
getContainer = _options$getContainer === void 0 ? function () {
return window;
} : _options$getContainer,
callback = _options.callback,
_options$duration = _options.duration,
duration = _options$duration === void 0 ? 450 : _options$duration;
var container = getContainer();
var scrollTop = getScroll(container, true);
var startTime = Date.now();
var frameFunc = function frameFunc() {
var timestamp = Date.now();
var time = timestamp - startTime;
var nextScrollTop = easeInOutCubic(time > duration ? duration : time, scrollTop, y, duration);
if (container === window) {
window.scrollTo(window.pageXOffset, nextScrollTop);
} else {
container.scrollTop = nextScrollTop;
}
if (time < duration) {
raf(frameFunc);
} else if (typeof callback === 'function') {
callback();
}
};
raf(frameFunc);
}