@codeurs/react-simple-wheel-picker
Version:
- This package is simple and flexible wheel picker for React - This package move like same as native applications picker - This package support accessibility
46 lines • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
var easeOutCubic = function (t, b, c, d) {
t /= d;
t--;
return c * (t * t * t + 1) + b;
};
exports.setScrollAnimation = function (root, currentPosition, changingValue) {
var start = 1;
var isStop = false;
var animation = function () {
if (isStop)
return;
var offset = easeOutCubic(start / 100, currentPosition, changingValue, 0.1);
requestAnimationFrame(animation);
root.scrollTo(0, offset);
var target = currentPosition + changingValue;
start += 1;
isStop = offset === target;
};
return animation;
};
var useScrollAnimation = function (root, refs) {
var timer = react_1.useRef(null);
var onScroll = function (data, itemID) {
if (timer.current) {
clearTimeout(timer.current);
}
var firstID = data[0].id;
var basicElm = refs[firstID].current;
var currentElm = refs[itemID || firstID].current;
var _root = root.current;
if (_root && basicElm && currentElm) {
timer.current = setTimeout(function () {
var basicOffsetTop = basicElm.offsetTop;
var targetOffsetTop = currentElm.offsetTop - basicOffsetTop;
var animation = exports.setScrollAnimation(_root, _root.scrollTop, targetOffsetTop - _root.scrollTop);
requestAnimationFrame(animation);
}, 500);
}
};
return onScroll;
};
exports.default = useScrollAnimation;
//# sourceMappingURL=useScrollAnimation.js.map