UNPKG

ahooks

Version:
55 lines (54 loc) 1.98 kB
"use strict"; 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;