UNPKG

smooth-scroll-to

Version:
80 lines (77 loc) 2.17 kB
"use strict"; var _interopRequireDefault = require("reshow-runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _getScrollInfo = require("get-scroll-info"); var _callFunc = _interopRequireDefault(require("call-func")); var _easingLib = require("easing-lib"); var _reshowConstant = require("reshow-constant"); // @ts-check var isRunning = (0, _reshowConstant.NEW_OBJ)(); /** * !!Important!! any logic change need take care isRunning * * @param {number} to * @param {number} [duration] * @param {HTMLElement} [el] * @param {function} [callback] * @param {string} [scrollKey] * @returns {function} cancel handler */ var smoothScrollTo = function smoothScrollTo(to, duration, el, callback, scrollKey) { if (duration === void 0) { duration = 500; } if (scrollKey === void 0) { scrollKey = "scrollTop"; } var scrollNode = (0, _getScrollInfo.getScrollNode)(el); var cb = function cb() { if (isRunning[scrollKey]) { (0, _callFunc["default"])(callback, [{ scrollNode: scrollNode, from: from, to: to, go: go }]); isRunning[scrollKey] = false; } }; var cancel = function cancel() { clearTimeout(isRunning[scrollKey]); isRunning[scrollKey] = false; }; if (isRunning[scrollKey]) { clearTimeout(isRunning[scrollKey]); isRunning[scrollKey] = setTimeout(function () { scrollNode[scrollKey] = to; cb(); }); return cancel; } var from = scrollNode[scrollKey]; var go = to - from; if (!go) { return function () {}; } (0, _easingLib.aniTimer)({ isContinue: function isContinue( /**@type number*/elapsedTime) { if (isRunning[scrollKey]) { var progress = (0, _easingLib.easeInOutCubic)(elapsedTime, from, go, duration); scrollNode[scrollKey] = progress; return true; } }, cancel: function cancel() { return cb(); }, done: function done() { return cb(); } }, duration); isRunning[scrollKey] = true; return cancel; }; var _default = smoothScrollTo; exports["default"] = _default; module.exports = exports.default;