rc-hooks
Version:
React Hooks Library.
42 lines (41 loc) • 1.59 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var usePersistFn_1 = tslib_1.__importDefault(require("../usePersistFn"));
var dom_1 = require("../utils/dom");
function getTarget(target) {
if (typeof target === 'function') {
// @ts-ignore
return target();
}
return target;
}
var useScrollToLower = function (_a) {
var _b = _a === void 0 ? {} : _a, outTarget = _b.target, _c = _b.threshold, threshold = _c === void 0 ? 100 : _c, _d = _b.onScrollLower, onScrollLower = _d === void 0 ? function () { } : _d;
var onScrollLowerPersist = (0, usePersistFn_1.default)(onScrollLower);
var scrollMethod = (0, react_1.useCallback)(function () {
if (!outTarget) {
return;
}
var target = getTarget(outTarget);
if (!target) {
return;
}
if ((0, dom_1.getScrollHeight)(target) - (0, dom_1.getScrollTop)(target) <= (0, dom_1.getClientHeight)(target) + threshold) {
onScrollLowerPersist();
}
}, [onScrollLowerPersist, outTarget, threshold]);
(0, react_1.useEffect)(function () {
if (outTarget) {
var target_1 = getTarget(outTarget);
if (target_1) {
target_1.addEventListener('scroll', scrollMethod);
return function () {
target_1.removeEventListener('scroll', scrollMethod);
};
}
}
}, [outTarget, scrollMethod]);
};
exports.default = useScrollToLower;
;