@tarojs/taro-h5 4.2.2-beta.5 → 4.2.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@ type TElement = Document | HTMLElement | Element;
4
4
  export declare class TaroH5IntersectionObserver implements Taro.IntersectionObserver {
5
5
  private _component;
6
6
  private _options;
7
- private _observerInst;
7
+ private _observerInst?;
8
8
  private _listeners;
9
9
  private _root;
10
10
  private _rootMargin;
@@ -1,4 +1,5 @@
1
1
  import Taro from '@tarojs/api';
2
+ import { Current } from '@tarojs/runtime';
2
3
  import { findDOM } from '../../utils/index.js';
3
4
 
4
5
  class TaroH5IntersectionObserver {
@@ -67,6 +68,9 @@ class TaroH5IntersectionObserver {
67
68
  this._observerInst.unobserve(listener.element);
68
69
  }
69
70
  this._observerInst.disconnect();
71
+ // 置空,防止 disconnect 后 pending 的 observe 回调复活观察(原生 IO 允许 disconnect 后再次 observe)
72
+ this._observerInst = undefined;
73
+ this._isInited = false;
70
74
  }
71
75
  }
72
76
  observe(targetSelector, callback) {
@@ -78,14 +82,36 @@ class TaroH5IntersectionObserver {
78
82
  console.warn('Intersection observer will be ignored because no relative nodes are found.');
79
83
  return;
80
84
  }
81
- const nodeList = this._options.observeAll
82
- ? this.container.querySelectorAll(targetSelector)
83
- : [this.container.querySelector(targetSelector)];
84
85
  Taro.nextTick(() => {
85
- nodeList.forEach(element => {
86
- if (!element)
87
- return;
88
- this._observerInst.observe(element);
86
+ var _a;
87
+ // 已 disconnect(或 relativeTo 重建)时不再观察
88
+ if (!this._observerInst || this._listeners.length)
89
+ return;
90
+ const container = this.container;
91
+ const nodeList = this._options.observeAll
92
+ ? Array.from(container.querySelectorAll(targetSelector))
93
+ : [container.querySelector(targetSelector)];
94
+ // 特殊处理 - 选自己(同 SelectorQuery,querySelector 只查后代、不含容器自身)
95
+ if (container !== document) {
96
+ const $nodeList = (_a = container.parentNode) === null || _a === void 0 ? void 0 : _a.querySelectorAll(targetSelector);
97
+ if ($nodeList) {
98
+ for (let i = 0, len = $nodeList.length; i < len; ++i) {
99
+ if (container === $nodeList[i]) {
100
+ nodeList.push(container);
101
+ break;
102
+ }
103
+ }
104
+ }
105
+ }
106
+ // 查询时机已推迟到下一 tick,仍可能查不到(懒渲染等),或节点已脱离文档(页面被切走)
107
+ const elements = nodeList.filter((element) => !!element && document.contains(element));
108
+ if (!elements.length) {
109
+ console.warn(`IntersectionObserver.observe:fail cannot find the node for selector "${targetSelector}"`);
110
+ return;
111
+ }
112
+ elements.forEach(element => {
113
+ var _a;
114
+ (_a = this._observerInst) === null || _a === void 0 ? void 0 : _a.observe(element);
89
115
  this._listeners.push({ element, callback });
90
116
  });
91
117
  });
@@ -96,7 +122,11 @@ class TaroH5IntersectionObserver {
96
122
  console.error('Relative nodes cannot be added after "observe" call in IntersectionObserver');
97
123
  return this;
98
124
  }
99
- this._root = this.container.querySelector(selector) || null;
125
+ const root = this.container.querySelector(selector);
126
+ if (!root) {
127
+ console.warn(`IntersectionObserver.relativeTo:fail cannot find the node for selector "${selector}"`);
128
+ }
129
+ this._root = root || null;
100
130
  if (margins) {
101
131
  this._rootMargin = margins;
102
132
  }
@@ -104,7 +134,42 @@ class TaroH5IntersectionObserver {
104
134
  return this;
105
135
  }
106
136
  relativeToViewport(margins) {
107
- return this.relativeTo('.taro_page', margins);
137
+ var _a, _b, _c;
138
+ // 已设置observe监听后,重新关联节点
139
+ if (this._listeners.length) {
140
+ console.error('Relative nodes cannot be added after "observe" call in IntersectionObserver');
141
+ return this;
142
+ }
143
+ // 微信小程序语义:参照「页面显示区域」。
144
+ // 默认(容器滚动)模式参照当前页 .taro_page;usingWindowScroll 下 .taro_page 不是滚动容器,
145
+ // 参照节点与目标随文档同滚、相交比永不变化,必须参照浏览器视口(root 为 null)。
146
+ // 注意直接用 document 级查询:旧实现 relativeTo('.taro_page') 在 container 作用域内查,
147
+ // 多页栈时会命中首个已隐藏的 .taro_page(旧页不卸载、display:none),导致恒不可见。
148
+ const id = (_b = (_a = Current.page) === null || _a === void 0 ? void 0 : _a.path) === null || _b === void 0 ? void 0 : _b.replace(/([^a-z0-9\u00a0-\uffff_-])/ig, '\\$1');
149
+ let pageEl = id ? document.querySelector(`.taro_page#${id}`) : null;
150
+ if (!pageEl) {
151
+ // 当前页 = 最后一个非 shade 的已 show 页面(旧页保留 taro_page_show,被切走时追加 taro_page_shade)
152
+ const $pages = document.querySelectorAll('.taro_router > .taro_page.taro_page_show:not(.taro_page_shade)');
153
+ pageEl = $pages.length ? $pages[$pages.length - 1] : null;
154
+ }
155
+ // __taroAppConfig.usingWindowScroll 是页面级配置、mount 时按页写入,切换瞬间可能滞后,用当前页样式二次确认
156
+ const usingWindowScroll = ((_c = window.__taroAppConfig) === null || _c === void 0 ? void 0 : _c.usingWindowScroll) === true ||
157
+ (!!pageEl && !/scroll|auto/.test(getComputedStyle(pageEl).overflowY));
158
+ if (usingWindowScroll) {
159
+ this._root = null;
160
+ }
161
+ else if (pageEl) {
162
+ this._root = pageEl;
163
+ }
164
+ else {
165
+ console.warn('IntersectionObserver.relativeToViewport:fail cannot find current page element');
166
+ this._root = null;
167
+ }
168
+ if (margins) {
169
+ this._rootMargin = margins;
170
+ }
171
+ this._observerInst = this.createInst();
172
+ return this;
108
173
  }
109
174
  _getCallbackByElement(element) {
110
175
  const listener = this._listeners.find(listener => listener.element === element);
@@ -1 +1 @@
1
- {"version":3,"file":"IntersectionObserver.js","sources":["../../../src/api/wxml/IntersectionObserver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IntersectionObserver.js","sources":["../../../src/api/wxml/IntersectionObserver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/dist/index.cjs.js CHANGED
@@ -5778,6 +5778,9 @@ class TaroH5IntersectionObserver {
5778
5778
  this._observerInst.unobserve(listener.element);
5779
5779
  }
5780
5780
  this._observerInst.disconnect();
5781
+ // 置空,防止 disconnect 后 pending 的 observe 回调复活观察(原生 IO 允许 disconnect 后再次 observe)
5782
+ this._observerInst = undefined;
5783
+ this._isInited = false;
5781
5784
  }
5782
5785
  }
5783
5786
  observe(targetSelector, callback) {
@@ -5789,14 +5792,36 @@ class TaroH5IntersectionObserver {
5789
5792
  console.warn('Intersection observer will be ignored because no relative nodes are found.');
5790
5793
  return;
5791
5794
  }
5792
- const nodeList = this._options.observeAll
5793
- ? this.container.querySelectorAll(targetSelector)
5794
- : [this.container.querySelector(targetSelector)];
5795
5795
  Taro.nextTick(() => {
5796
- nodeList.forEach(element => {
5797
- if (!element)
5798
- return;
5799
- this._observerInst.observe(element);
5796
+ var _a;
5797
+ // 已 disconnect(或 relativeTo 重建)时不再观察
5798
+ if (!this._observerInst || this._listeners.length)
5799
+ return;
5800
+ const container = this.container;
5801
+ const nodeList = this._options.observeAll
5802
+ ? Array.from(container.querySelectorAll(targetSelector))
5803
+ : [container.querySelector(targetSelector)];
5804
+ // 特殊处理 - 选自己(同 SelectorQuery,querySelector 只查后代、不含容器自身)
5805
+ if (container !== document) {
5806
+ const $nodeList = (_a = container.parentNode) === null || _a === void 0 ? void 0 : _a.querySelectorAll(targetSelector);
5807
+ if ($nodeList) {
5808
+ for (let i = 0, len = $nodeList.length; i < len; ++i) {
5809
+ if (container === $nodeList[i]) {
5810
+ nodeList.push(container);
5811
+ break;
5812
+ }
5813
+ }
5814
+ }
5815
+ }
5816
+ // 查询时机已推迟到下一 tick,仍可能查不到(懒渲染等),或节点已脱离文档(页面被切走)
5817
+ const elements = nodeList.filter((element) => !!element && document.contains(element));
5818
+ if (!elements.length) {
5819
+ console.warn(`IntersectionObserver.observe:fail cannot find the node for selector "${targetSelector}"`);
5820
+ return;
5821
+ }
5822
+ elements.forEach(element => {
5823
+ var _a;
5824
+ (_a = this._observerInst) === null || _a === void 0 ? void 0 : _a.observe(element);
5800
5825
  this._listeners.push({ element, callback });
5801
5826
  });
5802
5827
  });
@@ -5807,7 +5832,11 @@ class TaroH5IntersectionObserver {
5807
5832
  console.error('Relative nodes cannot be added after "observe" call in IntersectionObserver');
5808
5833
  return this;
5809
5834
  }
5810
- this._root = this.container.querySelector(selector) || null;
5835
+ const root = this.container.querySelector(selector);
5836
+ if (!root) {
5837
+ console.warn(`IntersectionObserver.relativeTo:fail cannot find the node for selector "${selector}"`);
5838
+ }
5839
+ this._root = root || null;
5811
5840
  if (margins) {
5812
5841
  this._rootMargin = margins;
5813
5842
  }
@@ -5815,7 +5844,42 @@ class TaroH5IntersectionObserver {
5815
5844
  return this;
5816
5845
  }
5817
5846
  relativeToViewport(margins) {
5818
- return this.relativeTo('.taro_page', margins);
5847
+ var _a, _b, _c;
5848
+ // 已设置observe监听后,重新关联节点
5849
+ if (this._listeners.length) {
5850
+ console.error('Relative nodes cannot be added after "observe" call in IntersectionObserver');
5851
+ return this;
5852
+ }
5853
+ // 微信小程序语义:参照「页面显示区域」。
5854
+ // 默认(容器滚动)模式参照当前页 .taro_page;usingWindowScroll 下 .taro_page 不是滚动容器,
5855
+ // 参照节点与目标随文档同滚、相交比永不变化,必须参照浏览器视口(root 为 null)。
5856
+ // 注意直接用 document 级查询:旧实现 relativeTo('.taro_page') 在 container 作用域内查,
5857
+ // 多页栈时会命中首个已隐藏的 .taro_page(旧页不卸载、display:none),导致恒不可见。
5858
+ const id = (_b = (_a = runtime.Current.page) === null || _a === void 0 ? void 0 : _a.path) === null || _b === void 0 ? void 0 : _b.replace(/([^a-z0-9\u00a0-\uffff_-])/ig, '\\$1');
5859
+ let pageEl = id ? document.querySelector(`.taro_page#${id}`) : null;
5860
+ if (!pageEl) {
5861
+ // 当前页 = 最后一个非 shade 的已 show 页面(旧页保留 taro_page_show,被切走时追加 taro_page_shade)
5862
+ const $pages = document.querySelectorAll('.taro_router > .taro_page.taro_page_show:not(.taro_page_shade)');
5863
+ pageEl = $pages.length ? $pages[$pages.length - 1] : null;
5864
+ }
5865
+ // __taroAppConfig.usingWindowScroll 是页面级配置、mount 时按页写入,切换瞬间可能滞后,用当前页样式二次确认
5866
+ const usingWindowScroll = ((_c = window.__taroAppConfig) === null || _c === void 0 ? void 0 : _c.usingWindowScroll) === true ||
5867
+ (!!pageEl && !/scroll|auto/.test(getComputedStyle(pageEl).overflowY));
5868
+ if (usingWindowScroll) {
5869
+ this._root = null;
5870
+ }
5871
+ else if (pageEl) {
5872
+ this._root = pageEl;
5873
+ }
5874
+ else {
5875
+ console.warn('IntersectionObserver.relativeToViewport:fail cannot find current page element');
5876
+ this._root = null;
5877
+ }
5878
+ if (margins) {
5879
+ this._rootMargin = margins;
5880
+ }
5881
+ this._observerInst = this.createInst();
5882
+ return this;
5819
5883
  }
5820
5884
  _getCallbackByElement(element) {
5821
5885
  const listener = this._listeners.find(listener => listener.element === element);