UNPKG

2.98 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.getTargetRect = getTargetRect;
9exports.getFixedTop = getFixedTop;
10exports.getFixedBottom = getFixedBottom;
11exports.getObserverEntities = getObserverEntities;
12exports.addObserveTarget = addObserveTarget;
13exports.removeObserveTarget = removeObserveTarget;
14
15var _addEventListener = _interopRequireDefault(require("rc-util/lib/Dom/addEventListener"));
16
17function getTargetRect(target) {
18 return target !== window ? target.getBoundingClientRect() : {
19 top: 0,
20 bottom: window.innerHeight
21 };
22}
23
24function getFixedTop(placeholderReact, targetRect, offsetTop) {
25 if (offsetTop !== undefined && targetRect.top > placeholderReact.top - offsetTop) {
26 return offsetTop + targetRect.top;
27 }
28
29 return undefined;
30}
31
32function getFixedBottom(placeholderReact, targetRect, offsetBottom) {
33 if (offsetBottom !== undefined && targetRect.bottom < placeholderReact.bottom + offsetBottom) {
34 var targetBottomOffset = window.innerHeight - targetRect.bottom;
35 return offsetBottom + targetBottomOffset;
36 }
37
38 return undefined;
39} // ======================== Observer ========================
40
41
42var TRIGGER_EVENTS = ['resize', 'scroll', 'touchstart', 'touchmove', 'touchend', 'pageshow', 'load'];
43var observerEntities = [];
44
45function getObserverEntities() {
46 // Only used in test env. Can be removed if refactor.
47 return observerEntities;
48}
49
50function addObserveTarget(target, affix) {
51 if (!target) return;
52 var entity = observerEntities.find(function (item) {
53 return item.target === target;
54 });
55
56 if (entity) {
57 entity.affixList.push(affix);
58 } else {
59 entity = {
60 target: target,
61 affixList: [affix],
62 eventHandlers: {}
63 };
64 observerEntities.push(entity); // Add listener
65
66 TRIGGER_EVENTS.forEach(function (eventName) {
67 entity.eventHandlers[eventName] = (0, _addEventListener["default"])(target, eventName, function () {
68 entity.affixList.forEach(function (targetAffix) {
69 targetAffix.lazyUpdatePosition();
70 });
71 });
72 });
73 }
74}
75
76function removeObserveTarget(affix) {
77 var observerEntity = observerEntities.find(function (oriObserverEntity) {
78 var hasAffix = oriObserverEntity.affixList.some(function (item) {
79 return item === affix;
80 });
81
82 if (hasAffix) {
83 oriObserverEntity.affixList = oriObserverEntity.affixList.filter(function (item) {
84 return item !== affix;
85 });
86 }
87
88 return hasAffix;
89 });
90
91 if (observerEntity && observerEntity.affixList.length === 0) {
92 observerEntities = observerEntities.filter(function (item) {
93 return item !== observerEntity;
94 }); // Remove listener
95
96 TRIGGER_EVENTS.forEach(function (eventName) {
97 var handler = observerEntity.eventHandlers[eventName];
98
99 if (handler && handler.remove) {
100 handler.remove();
101 }
102 });
103 }
104}
\No newline at end of file