UNPKG

react-scroll-to-bottom-updated

Version:
113 lines (90 loc) 11.7 kB
"use strict"; var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); _Object$defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; require("core-js/modules/es.function.name.js"); var _sign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/math/sign")); var _now = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/date/now")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = require("react"); /* eslint no-magic-numbers: ["error", { "ignore": [0, 1, 1.5, 5] }] */ function squareStepper(current, to) { var sign = (0, _sign["default"])(to - current); var step = Math.sqrt(Math.abs(to - current)); var next = current + step * sign; if (sign > 0) { return Math.min(to, next); } return Math.max(to, next); } function step(from, to, stepper, index) { var next = from; for (var i = 0; i < index; i++) { next = stepper(next, to); } return next; } var SpineTo = function SpineTo(_ref) { var name = _ref.name, onEnd = _ref.onEnd, target = _ref.target, value = _ref.value; var animator = (0, _react.useRef)(); var animate = (0, _react.useCallback)(function (name, from, to, index) { var start = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : (0, _now["default"])(); if (to === '100%' || typeof to === 'number') { cancelAnimationFrame(animator.current); animator.current = requestAnimationFrame(function () { if (target) { var toNumber = to === '100%' ? target.scrollHeight - target.offsetHeight : to; var nextValue = step(from, toNumber, squareStepper, ((0, _now["default"])() - start) / 5); if (Math.abs(toNumber - nextValue) < 1.5) { nextValue = toNumber; } target[name] = nextValue; if (toNumber === nextValue) { onEnd && onEnd(true); } else { animate(name, from, to, index + 1, start); } } }); } }, [animator, onEnd, target]); var handleCancelAnimation = (0, _react.useCallback)(function () { cancelAnimationFrame(animator.current); onEnd && onEnd(false); }, [onEnd]); (0, _react.useLayoutEffect)(function () { animate(name, target[name], value, 1); if (target) { target.addEventListener('pointerdown', handleCancelAnimation, { passive: true }); target.addEventListener('wheel', handleCancelAnimation, { passive: true }); return function () { target.removeEventListener('pointerdown', handleCancelAnimation); target.removeEventListener('wheel', handleCancelAnimation); cancelAnimationFrame(animator.current); }; } return function () { return cancelAnimationFrame(animator.current); }; }, [animate, animator, handleCancelAnimation, name, target, value]); return false; }; SpineTo.propTypes = { name: _propTypes["default"].string.isRequired, onEnd: _propTypes["default"].func, target: _propTypes["default"].any.isRequired, value: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].oneOf(['100%'])]).isRequired }; var _default = SpineTo; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TcGluZVRvLmpzIl0sIm5hbWVzIjpbInNxdWFyZVN0ZXBwZXIiLCJjdXJyZW50IiwidG8iLCJzaWduIiwic3RlcCIsIk1hdGgiLCJzcXJ0IiwiYWJzIiwibmV4dCIsIm1pbiIsIm1heCIsImZyb20iLCJzdGVwcGVyIiwiaW5kZXgiLCJpIiwiU3BpbmVUbyIsIm5hbWUiLCJvbkVuZCIsInRhcmdldCIsInZhbHVlIiwiYW5pbWF0b3IiLCJhbmltYXRlIiwic3RhcnQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRvTnVtYmVyIiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0IiwibmV4dFZhbHVlIiwiaGFuZGxlQ2FuY2VsQW5pbWF0aW9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJhbnkiLCJvbmVPZlR5cGUiLCJudW1iZXIiLCJvbmVPZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBSEE7QUFLQSxTQUFTQSxhQUFULENBQXVCQyxPQUF2QixFQUFnQ0MsRUFBaEMsRUFBb0M7QUFDbEMsTUFBTUMsSUFBSSxHQUFHLHNCQUFVRCxFQUFFLEdBQUdELE9BQWYsQ0FBYjtBQUNBLE1BQU1HLElBQUksR0FBR0MsSUFBSSxDQUFDQyxJQUFMLENBQVVELElBQUksQ0FBQ0UsR0FBTCxDQUFTTCxFQUFFLEdBQUdELE9BQWQsQ0FBVixDQUFiO0FBQ0EsTUFBTU8sSUFBSSxHQUFHUCxPQUFPLEdBQUdHLElBQUksR0FBR0QsSUFBOUI7O0FBRUEsTUFBSUEsSUFBSSxHQUFHLENBQVgsRUFBYztBQUNaLFdBQU9FLElBQUksQ0FBQ0ksR0FBTCxDQUFTUCxFQUFULEVBQWFNLElBQWIsQ0FBUDtBQUNEOztBQUVELFNBQU9ILElBQUksQ0FB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TyxFQUFFO0FBQVgsT0FBOUQ7QUFDQWIsTUFBQUEsTUFBTSxDQUFDWSxnQkFBUCxDQUF3QixPQUF4QixFQUFpQ0QscUJBQWpDLEVBQXdEO0FBQUVFLFFBQUFBLE9BQU8sRUFBRTtBQUFYLE9BQXhEO0FBRUEsYUFBTyxZQUFNO0FBQ1hiLFFBQUFBLE1BQU0sQ0FBQ2MsbUJBQVAsQ0FBMkIsYUFBM0IsRUFBMENILHFCQUExQztBQUNBWCxRQUFBQSxNQUFNLENBQUNjLG1CQUFQLENBQTJCLE9BQTNCLEVBQW9DSCxxQkFBcEM7QUFDQU4sUUFBQUEsb0JBQW9CLENBQUNILFFBQVEsQ0FBQ25CLE9BQVYsQ0FBcEI7QUFDRCxPQUpEO0FBS0Q7O0FBRUQsV0FBTztBQUFBLGFBQU1zQixvQkFBb0IsQ0FBQ0gsUUFBUSxDQUFDbkIsT0FBVixDQUExQjtBQUFBLEtBQVA7QUFDRCxHQWZELEVBZUcsQ0FBQ29CLE9BQUQsRUFBVUQsUUFBVixFQUFvQlMscUJBQXBCLEVBQTJDYixJQUEzQyxFQUFpREUsTUFBakQsRUFBeURDLEtBQXpELENBZkg7QUFpQkEsU0FBTyxLQUFQO0FBQ0QsQ0F0REQ7O0FBd0RBSixPQUFPLENBQUNrQixTQUFSLEdBQW9CO0FBQ2xCakIsRUFBQUEsSUFBSSxFQUFFa0Isc0JBQVVDLE1BQVYsQ0FBaUJDLFVBREw7QUFFbEJuQixFQUFBQSxLQUFLLEVBQUVpQixzQkFBVUcsSUFGQztBQUdsQm5CLEVBQUFBLE1BQU0sRUFBRWdCLHNCQUFVSSxHQUFWLENBQWNGLFVBSEo7QUFJbEJqQixFQUFBQSxLQUFLLEVBQUVlLHNCQUFVSyxTQUFWLENBQW9CLENBQUNMLHNCQUFVTSxNQUFYLEVBQW1CTixzQkFBVU8sS0FBVixDQUFnQixDQUFDLE1BQUQsQ0FBaEIsQ0FBbkIsQ0FBcEIsRUFBbUVMO0FBSnhELENBQXBCO2VBT2VyQixPIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLW1hZ2ljLW51bWJlcnM6IFtcImVycm9yXCIsIHsgXCJpZ25vcmVcIjogWzAsIDEsIDEuNSwgNV0gfV0gKi9cblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gc3F1YXJlU3RlcHBlcihjdXJyZW50LCB0bykge1xuICBjb25zdCBzaWduID0gTWF0aC5zaWduKHRvIC0gY3VycmVudCk7XG4gIGNvbnN0IHN0ZXAgPSBNYXRoLnNxcnQoTWF0aC5hYnModG8gLSBjdXJyZW50KSk7XG4gIGNvbnN0IG5leHQgPSBjdXJyZW50ICsgc3RlcCAqIHNpZ247XG5cbiAgaWYgKHNpZ24gPiAwKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHRvLCBuZXh0KTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLm1heCh0bywgbmV4dCk7XG59XG5cbmZ1bmN0aW9uIHN0ZXAoZnJvbSwgdG8sIHN0ZXBwZXIsIGluZGV4KSB7XG4gIGxldCBuZXh0ID0gZnJvbTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICBuZXh0ID0gc3RlcHBlcihuZXh0LCB0byk7XG4gIH1cblxuICByZXR1cm4gbmV4dDtcbn1cblxuY29uc3QgU3BpbmVUbyA9ICh7IG5hbWUsIG9uRW5kLCB0YXJnZXQsIHZhbHVlIH0pID0+IHtcbiAgY29uc3QgYW5pbWF0b3IgPSB1c2VSZWYoKTtcblxuICBjb25zdCBhbmltYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5hbWUsIGZyb20sIHRvLCBpbmRleCwgc3RhcnQgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgICBpZiAodG8gPT09ICcxMDAlJyB8fCB0eXBlb2YgdG8gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdG9yLmN1cnJlbnQpO1xuXG4gICAgICAgIGFuaW1hdG9yLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvTnVtYmVyID0gdG8gPT09ICcxMDAlJyA/IHRhcmdldC5zY3JvbGxIZWlnaHQgLSB0YXJnZXQub2Zmc2V0SGVpZ2h0IDogdG87XG4gICAgICAgICAgICBsZXQgbmV4dFZhbHVlID0gc3RlcChmcm9tLCB0b051bWJlciwgc3F1YXJlU3RlcHBlciwgKERhdGUubm93KCkgLSBzdGFydCkgLyA1KTtcblxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRvTnVtYmVyIC0gbmV4dFZhbHVlKSA8IDEuNSkge1xuICAgICAgICAgICAgICBuZXh0VmFsdWUgPSB0b051bWJlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gbmV4dFZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodG9OdW1iZXIgPT09IG5leHRWYWx1ZSkge1xuICAgICAgICAgICAgICBvbkVuZCAmJiBvbkVuZCh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFuaW1hdGUobmFtZSwgZnJvbSwgdG8sIGluZGV4ICsgMSwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbYW5pbWF0b3IsIG9uRW5kLCB0YXJnZXRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsQW5pbWF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdG9yLmN1cnJlbnQpO1xuICAgIG9uRW5kICYmIG9uRW5kKGZhbHNlKTtcbiAgfSwgW29uRW5kXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBhbmltYXRlKG5hbWUsIHRhcmdldFtuYW1lXSwgdmFsdWUsIDEpO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlQ2FuY2VsQW5pbWF0aW9uLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBoYW5kbGVDYW5jZWxBbmltYXRpb24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlQ2FuY2VsQW5pbWF0aW9uKTtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgaGFuZGxlQ2FuY2VsQW5pbWF0aW9uKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbWF0b3IuY3VycmVudCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRvci5jdXJyZW50KTtcbiAgfSwgW2FuaW1hdGUsIGFuaW1hdG9yLCBoYW5kbGVDYW5jZWxBbmltYXRpb24sIG5hbWUsIHRhcmdldCwgdmFsdWVdKTtcblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5TcGluZVRvLnByb3BUeXBlcyA9IHtcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBvbkVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRhcmdldDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9uZU9mKFsnMTAwJSddKV0pLmlzUmVxdWlyZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNwaW5lVG87XG4iXX0=