12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = useWatch;
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
- var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
- var _util = require("../util");
- function useWatch(open, target, popup, onAlign, onScroll) {
- (0, _useLayoutEffect.default)(function () {
- if (open && target && popup) {
- var targetElement = target;
- var popupElement = popup;
- var targetScrollList = (0, _util.collectScroller)(targetElement);
- var popupScrollList = (0, _util.collectScroller)(popupElement);
- var win = (0, _util.getWin)(popupElement);
- var mergedList = new Set([win].concat((0, _toConsumableArray2.default)(targetScrollList), (0, _toConsumableArray2.default)(popupScrollList)));
- function notifyScroll() {
- onAlign();
- onScroll();
- }
- mergedList.forEach(function (scroller) {
- scroller.addEventListener('scroll', notifyScroll, {
- passive: true
- });
- });
- win.addEventListener('resize', notifyScroll, {
- passive: true
- });
- // First time always do align
- onAlign();
- return function () {
- mergedList.forEach(function (scroller) {
- scroller.removeEventListener('scroll', notifyScroll);
- win.removeEventListener('resize', notifyScroll);
- });
- };
- }
- }, [open, target, popup]);
- }
|