42 lines
1.4 KiB
JavaScript
42 lines
1.4 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = void 0;
|
||
|
var _react = require("react");
|
||
|
var _default = exports.default = function _default(isScrollAtTop, isScrollAtBottom) {
|
||
|
// Do lock for a wheel when scrolling
|
||
|
var lockRef = (0, _react.useRef)(false);
|
||
|
var lockTimeoutRef = (0, _react.useRef)(null);
|
||
|
function lockScroll() {
|
||
|
clearTimeout(lockTimeoutRef.current);
|
||
|
lockRef.current = true;
|
||
|
lockTimeoutRef.current = setTimeout(function () {
|
||
|
lockRef.current = false;
|
||
|
}, 50);
|
||
|
}
|
||
|
// Pass to ref since global add is in closure
|
||
|
var scrollPingRef = (0, _react.useRef)({
|
||
|
top: isScrollAtTop,
|
||
|
bottom: isScrollAtBottom
|
||
|
});
|
||
|
scrollPingRef.current.top = isScrollAtTop;
|
||
|
scrollPingRef.current.bottom = isScrollAtBottom;
|
||
|
return function (deltaY) {
|
||
|
var smoothOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||
|
var originScroll =
|
||
|
// Pass origin wheel when on the top
|
||
|
deltaY < 0 && scrollPingRef.current.top ||
|
||
|
// Pass origin wheel when on the bottom
|
||
|
deltaY > 0 && scrollPingRef.current.bottom;
|
||
|
if (smoothOffset && originScroll) {
|
||
|
// No need lock anymore when it's smooth offset from touchMove interval
|
||
|
clearTimeout(lockTimeoutRef.current);
|
||
|
lockRef.current = false;
|
||
|
} else if (!originScroll || lockRef.current) {
|
||
|
lockScroll();
|
||
|
}
|
||
|
return !lockRef.current && originScroll;
|
||
|
};
|
||
|
};
|