ahooks
Version:
react hooks library
55 lines (54 loc) • 1.98 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _tslib = require("tslib");
require("intersection-observer");
var _react = require("react");
var _domTarget = require("../utils/domTarget");
var _useEffectWithTarget = _interopRequireDefault(require("../utils/useEffectWithTarget"));
function useInViewport(target, options) {
var _a = (0, _tslib.__read)((0, _react.useState)(), 2),
state = _a[0],
setState = _a[1];
var _b = (0, _tslib.__read)((0, _react.useState)(), 2),
ratio = _b[0],
setRatio = _b[1];
(0, _useEffectWithTarget["default"])(function () {
var el = (0, _domTarget.getTargetElement)(target);
if (!el) {
return;
}
var observer = new IntersectionObserver(function (entries) {
var e_1, _a;
try {
for (var entries_1 = (0, _tslib.__values)(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
var entry = entries_1_1.value;
setRatio(entry.intersectionRatio);
setState(entry.isIntersecting);
}
} catch (e_1_1) {
e_1 = {
error: e_1_1
};
} finally {
try {
if (entries_1_1 && !entries_1_1.done && (_a = entries_1["return"])) _a.call(entries_1);
} finally {
if (e_1) throw e_1.error;
}
}
}, (0, _tslib.__assign)((0, _tslib.__assign)({}, options), {
root: (0, _domTarget.getTargetElement)(options === null || options === void 0 ? void 0 : options.root)
}));
observer.observe(el);
return function () {
observer.disconnect();
};
}, [options === null || options === void 0 ? void 0 : options.rootMargin, options === null || options === void 0 ? void 0 : options.threshold], target);
return [state, ratio];
}
var _default = useInViewport;
exports["default"] = _default;
;