@whitesev/pops 4.1.0 → 4.2.1

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.
Files changed (42) hide show
  1. package/dist/index.amd.js +250 -227
  2. package/dist/index.amd.js.map +1 -1
  3. package/dist/index.amd.min.js +1 -1
  4. package/dist/index.amd.min.js.map +1 -1
  5. package/dist/index.cjs.js +250 -227
  6. package/dist/index.cjs.js.map +1 -1
  7. package/dist/index.cjs.min.js +1 -1
  8. package/dist/index.cjs.min.js.map +1 -1
  9. package/dist/index.esm.js +250 -227
  10. package/dist/index.esm.js.map +1 -1
  11. package/dist/index.esm.min.js +1 -1
  12. package/dist/index.esm.min.js.map +1 -1
  13. package/dist/index.iife.js +250 -227
  14. package/dist/index.iife.js.map +1 -1
  15. package/dist/index.iife.min.js +1 -1
  16. package/dist/index.iife.min.js.map +1 -1
  17. package/dist/index.system.js +250 -227
  18. package/dist/index.system.js.map +1 -1
  19. package/dist/index.system.min.js +1 -1
  20. package/dist/index.system.min.js.map +1 -1
  21. package/dist/index.umd.js +250 -227
  22. package/dist/index.umd.js.map +1 -1
  23. package/dist/index.umd.min.js +1 -1
  24. package/dist/index.umd.min.js.map +1 -1
  25. package/dist/types/src/Pops.d.ts +17 -16
  26. package/dist/types/src/types/PopsDOMUtilsEventType.d.ts +3 -3
  27. package/dist/types/src/types/mask.d.ts +6 -6
  28. package/dist/types/src/utils/PopsDOMUtils.d.ts +6 -18
  29. package/dist/types/src/utils/PopsInstanceUtils.d.ts +22 -0
  30. package/dist/types/src/utils/PopsUtils.d.ts +1 -1
  31. package/package.json +1 -1
  32. package/src/Pops.ts +9 -12
  33. package/src/components/panel/handlerComponents.ts +4 -4
  34. package/src/handler/PopsHandler.ts +9 -21
  35. package/src/handler/PopsInstHandler.ts +3 -2
  36. package/src/types/PopsDOMUtilsEventType.d.ts +3 -3
  37. package/src/types/mask.d.ts +6 -6
  38. package/src/utils/PopsDOMUtils.ts +105 -113
  39. package/src/utils/PopsInstanceUtils.ts +50 -0
  40. package/src/utils/PopsUtils.ts +2 -2
  41. package/dist/types/src/utils/PopsDOMUtilsEventsConfig.d.ts +0 -4
  42. package/src/utils/PopsDOMUtilsEventsConfig.ts +0 -4
@@ -11,11 +11,14 @@ import type {
11
11
  PopsDOMUtilsCSSPropertyType,
12
12
  PopsDOMUtilsTargetElementType,
13
13
  } from "../types/PopsDOMUtilsEventType";
14
- import { SymbolEvents } from "./PopsDOMUtilsEventsConfig";
15
14
  import { OriginPrototype, PopsCore } from "../PopsCore";
16
15
  import { popsUtils } from "./PopsUtils";
17
16
  import { PopsSafeUtils } from "./PopsSafeUtils";
18
17
  import { PopsCommonCSSClassName } from "../config/CommonCSSClassName";
18
+ /**
19
+ * 存储在元素属性上的事件名
20
+ */
21
+ const SymbolEvents = Symbol("events_" + (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1));
19
22
 
20
23
  class PopsDOMUtilsEvent {
21
24
  /**
@@ -135,10 +138,10 @@ class PopsDOMUtilsEvent {
135
138
  | string
136
139
  | string[]
137
140
  | undefined
138
- | ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
141
+ | (<E extends HTMLElement = HTMLElement>(this: E, event: T, $selector: E) => void)
139
142
  | null,
140
143
  callback?:
141
- | ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
144
+ | (<E extends HTMLElement = HTMLElement>(this: E, event: T, $selector: E) => void)
142
145
  | PopsDOMUtilsEventListenerOption
143
146
  | boolean,
144
147
  option?: PopsDOMUtilsEventListenerOption | boolean
@@ -149,7 +152,7 @@ class PopsDOMUtilsEvent {
149
152
  * @param startIndex
150
153
  * @param option
151
154
  */
152
- function getOption(args: IArguments, startIndex: number, option: PopsDOMUtilsEventListenerOption) {
155
+ const getOption = function (args: IArguments, startIndex: number, option: PopsDOMUtilsEventListenerOption) {
153
156
  const currentParam = args[startIndex];
154
157
  if (typeof currentParam === "boolean") {
155
158
  option.capture = currentParam;
@@ -172,7 +175,7 @@ class PopsDOMUtilsEvent {
172
175
  option.isComposedPath = currentParam.isComposedPath;
173
176
  }
174
177
  return option;
175
- }
178
+ };
176
179
 
177
180
  const that = this;
178
181
  // eslint-disable-next-line prefer-rest-params
@@ -186,33 +189,32 @@ class PopsDOMUtilsEvent {
186
189
  emit() {},
187
190
  };
188
191
  }
189
- let $elList: HTMLElement[] = [];
192
+ let $elList: (Element | Document | Window)[] = [];
190
193
  if (element instanceof NodeList || Array.isArray(element)) {
191
- element = element as HTMLElement[];
192
- $elList = [...element];
194
+ $elList = $elList.concat(Array.from(element as Element[]));
193
195
  } else {
194
- $elList.push(element as HTMLElement);
196
+ $elList.push(element as Element);
195
197
  }
196
198
  // 事件名
197
199
  let eventTypeList: string[] = [];
198
200
  if (Array.isArray(eventType)) {
199
- eventTypeList = eventTypeList.concat(
200
- eventType.filter((eventTypeItem) => typeof eventTypeItem === "string" && eventTypeItem.toString() !== "")
201
- );
201
+ eventTypeList = eventTypeList.concat(eventType.filter((it) => typeof it === "string" && it.toString() !== ""));
202
202
  } else if (typeof eventType === "string") {
203
- eventTypeList = eventTypeList.concat(eventType.split(" ").filter((eventTypeItem) => eventTypeItem !== ""));
203
+ eventTypeList = eventTypeList.concat(eventType.split(" ").filter((it) => it !== ""));
204
204
  }
205
205
  // 子元素选择器
206
206
  let selectorList: string[] = [];
207
207
  if (Array.isArray(selector)) {
208
- selectorList = selectorList.concat(
209
- selector.filter((selectorItem) => typeof selectorItem === "string" && selectorItem.toString() !== "")
210
- );
208
+ selectorList = selectorList.concat(selector.filter((it) => typeof it === "string" && it.toString() !== ""));
211
209
  } else if (typeof selector === "string") {
212
210
  selectorList.push(selector);
213
211
  }
214
212
  // 事件回调
215
- let listenerCallBack: (this: HTMLElement, event: Event, selectorTarget?: HTMLElement) => void = callback as any;
213
+ let listenerCallBack: (this: Element, event: Event, $selector?: HTMLElement) => void | boolean = callback as (
214
+ this: Element,
215
+ event: Event,
216
+ $selector?: HTMLElement
217
+ ) => void | boolean;
216
218
  // 事件配置
217
219
  let listenerOption: PopsDOMUtilsEventListenerOption = {
218
220
  capture: false,
@@ -232,39 +234,51 @@ class PopsDOMUtilsEvent {
232
234
  /**
233
235
  * 如果是once,那么删除该监听和元素上的事件和监听
234
236
  */
235
- function checkOptionOnceToRemoveEventListener() {
237
+ const checkOptionOnceToRemoveEventListener = ($el: PopsDOMUtilsElementEventType) => {
236
238
  if (listenerOption.once) {
237
- that.off(element, eventType as any, selector as any, callback as any, option);
239
+ this.off($el, eventTypeList, selector as any, callback as any, option);
238
240
  }
239
- }
240
- $elList.forEach((elementItem) => {
241
+ };
242
+ $elList.forEach(($elItem) => {
241
243
  /**
242
244
  * 事件回调
243
245
  * @param event
244
246
  */
245
- function domUtilsEventCallBack(event: Event) {
247
+ const handlerCallBack = function (event: Event) {
248
+ let call_this: Element | undefined = void 0;
249
+ let call_event: Event | undefined = void 0;
250
+ let call_$selector: HTMLElement | undefined = void 0;
251
+ let execCallback = false;
246
252
  if (selectorList.length) {
247
253
  // 存在子元素选择器
248
254
  // 这时候的this和target都是子元素选择器的元素
249
- let eventTarget = listenerOption.isComposedPath
250
- ? (event.composedPath()[0] as HTMLElement)
251
- : (event.target as HTMLElement);
252
- let totalParent = elementItem;
253
- if (popsUtils.isWin(totalParent)) {
254
- if (totalParent === (PopsCore.document as any as HTMLElement)) {
255
- totalParent = PopsCore.document.documentElement;
255
+ let $target: HTMLElement;
256
+ if (listenerOption.isComposedPath) {
257
+ // 可能为空
258
+ const composedPath = event.composedPath();
259
+ if (!composedPath.length && event.target) {
260
+ composedPath.push(event.target);
256
261
  }
262
+ $target = composedPath[0] as HTMLElement;
263
+ } else {
264
+ $target = event.target as HTMLElement;
257
265
  }
258
- const findValue = selectorList.find((selectorItem) => {
266
+ let $parent = $elItem;
267
+ if (popsUtils.isWin($parent)) {
268
+ // window和document共用一个对象
269
+ // 这样就能处理子元素选择器无法匹配的问题
270
+ $parent = PopsCore.document.documentElement;
271
+ }
272
+ const findValue = selectorList.find((selectors) => {
259
273
  // 判断目标元素是否匹配选择器
260
- if (that.matches(eventTarget, selectorItem)) {
274
+ if (that.matches($target, selectors)) {
261
275
  // 当前目标可以被selector所匹配到
262
276
  return true;
263
277
  }
264
278
  // 在上层与主元素之间寻找可以被selector所匹配到的
265
- const $closestMatches = that.closest<HTMLElement>(eventTarget, selectorItem);
266
- if ($closestMatches && totalParent?.contains($closestMatches)) {
267
- eventTarget = $closestMatches;
279
+ const $closestMatches = that.closest<HTMLElement>($target, selectors);
280
+ if ($closestMatches && (<HTMLElement>$parent)?.contains?.($closestMatches)) {
281
+ $target = $closestMatches;
268
282
  return true;
269
283
  }
270
284
  return false;
@@ -274,39 +288,48 @@ class PopsDOMUtilsEvent {
274
288
  try {
275
289
  OriginPrototype.Object.defineProperty(event, "target", {
276
290
  get() {
277
- return eventTarget;
291
+ return $target;
278
292
  },
279
293
  });
280
- } catch {
281
- // 忽略
282
- }
283
- listenerCallBack.call(eventTarget, event as any, eventTarget);
284
- checkOptionOnceToRemoveEventListener();
294
+ // oxlint-disable-next-line no-empty
295
+ } catch {}
296
+ execCallback = true;
297
+ call_this = $target;
298
+ call_event = event;
299
+ call_$selector = $target;
285
300
  }
286
301
  } else {
287
- // 这时候的this指向监听的元素
288
- listenerCallBack.call(elementItem, event as any);
289
- checkOptionOnceToRemoveEventListener();
302
+ execCallback = true;
303
+ call_this = $elItem as Element;
304
+ call_event = event;
290
305
  }
291
- }
306
+ if (execCallback) {
307
+ const result = listenerCallBack.call(call_this!, call_event!, call_$selector!);
308
+ checkOptionOnceToRemoveEventListener($elItem);
309
+ if (typeof result === "boolean" && !result) {
310
+ return false;
311
+ }
312
+ }
313
+ };
292
314
 
293
315
  // 遍历事件名设置元素事件
294
316
  eventTypeList.forEach((eventName) => {
295
- elementItem.addEventListener(eventName, domUtilsEventCallBack, listenerOption);
317
+ // add listener
318
+ $elItem.addEventListener(eventName, handlerCallBack, listenerOption);
296
319
  // 获取对象上的事件
297
320
  const elementEvents: {
298
321
  [k: string]: PopsDOMUtilsEventListenerOptionsAttribute[];
299
- } = Reflect.get(elementItem, SymbolEvents) || {};
322
+ } = Reflect.get($elItem, SymbolEvents) || {};
300
323
  // 初始化对象上的xx事件
301
324
  elementEvents[eventName] = elementEvents[eventName] || [];
302
325
  elementEvents[eventName].push({
303
326
  selector: selectorList,
304
327
  option: listenerOption,
305
- callback: domUtilsEventCallBack,
306
- originCallBack: listenerCallBack,
328
+ handlerCallBack: handlerCallBack,
329
+ callback: listenerCallBack,
307
330
  });
308
331
  // 覆盖事件
309
- Reflect.set(elementItem, SymbolEvents, elementEvents);
332
+ Reflect.set($elItem, SymbolEvents, elementEvents);
310
333
  });
311
334
  });
312
335
 
@@ -326,11 +349,11 @@ class PopsDOMUtilsEvent {
326
349
  },
327
350
  /**
328
351
  * 主动触发事件
329
- * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
330
- * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
352
+ * @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
353
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了`$selector`的没有值
331
354
  */
332
- emit: (details?: object, useDispatchToEmit?: boolean) => {
333
- that.emit($elList, eventTypeList, details, useDispatchToEmit);
355
+ emit: (extraDetails?: object, useDispatchToTriggerEvent?: boolean) => {
356
+ that.emit($elList, eventTypeList, extraDetails, useDispatchToTriggerEvent);
334
357
  },
335
358
  };
336
359
  }
@@ -350,7 +373,7 @@ class PopsDOMUtilsEvent {
350
373
  off<T extends PopsDOMUtils_EventType>(
351
374
  element: PopsDOMUtilsElementEventType,
352
375
  eventType: T | T[],
353
- callback?: (this: HTMLElement, event: PopsDOMUtils_Event[T]) => void,
376
+ callback?: <E extends HTMLElement = HTMLElement>(this: E, event: PopsDOMUtils_Event[T]) => void,
354
377
  option?: EventListenerOptions | boolean,
355
378
  filter?: (
356
379
  value: PopsDOMUtilsEventListenerOptionsAttribute,
@@ -374,7 +397,7 @@ class PopsDOMUtilsEvent {
374
397
  off<T extends Event>(
375
398
  element: PopsDOMUtilsElementEventType,
376
399
  eventType: string | string[],
377
- callback?: (this: HTMLElement, event: T) => void,
400
+ callback?: <E extends HTMLElement = HTMLElement>(this: E, event: T) => void,
378
401
  option?: EventListenerOptions | boolean,
379
402
  filter?: (
380
403
  value: PopsDOMUtilsEventListenerOptionsAttribute,
@@ -400,7 +423,7 @@ class PopsDOMUtilsEvent {
400
423
  element: PopsDOMUtilsElementEventType,
401
424
  eventType: T | T[],
402
425
  selector?: string | string[] | undefined | null,
403
- callback?: (this: HTMLElement, event: PopsDOMUtils_Event[T], selectorTarget: HTMLElement) => void,
426
+ callback?: <E extends HTMLElement = HTMLElement>(this: E, event: PopsDOMUtils_Event[T], $selector: E) => void,
404
427
  option?: EventListenerOptions | boolean,
405
428
  filter?: (
406
429
  value: PopsDOMUtilsEventListenerOptionsAttribute,
@@ -426,7 +449,7 @@ class PopsDOMUtilsEvent {
426
449
  element: PopsDOMUtilsElementEventType,
427
450
  eventType: string | string[],
428
451
  selector?: string | string[] | undefined | null,
429
- callback?: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void,
452
+ callback?: <E extends HTMLElement = HTMLElement>(this: E, event: T, $selector: E) => void,
430
453
  option?: EventListenerOptions | boolean,
431
454
  filter?: (
432
455
  value: PopsDOMUtilsEventListenerOptionsAttribute,
@@ -441,9 +464,12 @@ class PopsDOMUtilsEvent {
441
464
  | string
442
465
  | string[]
443
466
  | undefined
444
- | ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
467
+ | (<E extends HTMLElement = HTMLElement>(this: E, event: T, $selector: E) => void)
445
468
  | null,
446
- callback?: ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void) | EventListenerOptions | boolean,
469
+ callback?:
470
+ | (<E extends HTMLElement = HTMLElement>(this: E, event: T, $selector: E) => void)
471
+ | EventListenerOptions
472
+ | boolean,
447
473
  option?:
448
474
  | EventListenerOptions
449
475
  | boolean
@@ -464,7 +490,7 @@ class PopsDOMUtilsEvent {
464
490
  * @param startIndex
465
491
  * @param option
466
492
  */
467
- function getOption(args1: IArguments, startIndex: number, option: EventListenerOptions) {
493
+ const getOption = function (args1: IArguments, startIndex: number, option: EventListenerOptions) {
468
494
  const currentParam: EventListenerOptions | boolean = args1[startIndex];
469
495
  if (typeof currentParam === "boolean") {
470
496
  option.capture = currentParam;
@@ -472,12 +498,12 @@ class PopsDOMUtilsEvent {
472
498
  option.capture = currentParam.capture;
473
499
  }
474
500
  return option;
475
- }
476
- const DOMUtilsContext = this;
501
+ };
502
+ const that = this;
477
503
  // eslint-disable-next-line prefer-rest-params
478
504
  const args = arguments;
479
505
  if (typeof element === "string") {
480
- element = DOMUtilsContext.selectorAll(element);
506
+ element = that.selectorAll(element);
481
507
  }
482
508
  if (element == null) {
483
509
  return;
@@ -485,31 +511,27 @@ class PopsDOMUtilsEvent {
485
511
  let $elList: HTMLElement[] = [];
486
512
  if (element instanceof NodeList || Array.isArray(element)) {
487
513
  element = element as HTMLElement[];
488
- $elList = $elList.concat(element);
514
+ $elList = $elList.concat(Array.from(element));
489
515
  } else {
490
516
  $elList.push(element as HTMLElement);
491
517
  }
492
518
  let eventTypeList: string[] = [];
493
519
  if (Array.isArray(eventType)) {
494
- eventTypeList = eventTypeList.concat(
495
- eventType.filter((eventTypeItem) => typeof eventTypeItem === "string" && eventTypeItem.toString() !== "")
496
- );
520
+ eventTypeList = eventTypeList.concat(eventType.filter((it) => typeof it === "string" && it.toString() !== ""));
497
521
  } else if (typeof eventType === "string") {
498
- eventTypeList = eventTypeList.concat(eventType.split(" ").filter((eventTypeItem) => eventTypeItem !== ""));
522
+ eventTypeList = eventTypeList.concat(eventType.split(" ").filter((it) => it !== ""));
499
523
  }
500
524
  // 子元素选择器
501
525
  let selectorList: string[] = [];
502
526
  if (Array.isArray(selector)) {
503
- selectorList = selectorList.concat(
504
- selector.filter((selectorItem) => typeof selectorItem === "string" && selectorItem.toString() !== "")
505
- );
527
+ selectorList = selectorList.concat(selector.filter((it) => typeof it === "string" && it.toString() !== ""));
506
528
  } else if (typeof selector === "string") {
507
529
  selectorList.push(selector);
508
530
  }
509
531
  /**
510
532
  * 事件的回调函数
511
533
  */
512
- let listenerCallBack: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void = callback as any;
534
+ let listenerCallBack: (this: HTMLElement, event: T, $selector: HTMLElement) => void = callback as any;
513
535
 
514
536
  /**
515
537
  * 事件的配置
@@ -534,18 +556,18 @@ class PopsDOMUtilsEvent {
534
556
  array: PopsDOMUtilsEventListenerOptionsAttribute[]
535
557
  ) => boolean;
536
558
  }
537
- $elList.forEach((elementItem) => {
559
+ $elList.forEach(($elItem) => {
538
560
  // 获取对象上的事件
539
561
  const elementEvents: {
540
562
  [key: string]: PopsDOMUtilsEventListenerOptionsAttribute[];
541
- } = Reflect.get(elementItem, SymbolEvents) || {};
563
+ } = Reflect.get($elItem, SymbolEvents) || {};
542
564
  eventTypeList.forEach((eventName) => {
543
565
  const handlers = elementEvents[eventName] || [];
544
566
  const filterHandler = typeof filter === "function" ? handlers.filter(filter) : handlers;
545
567
  for (let index = 0; index < filterHandler.length; index++) {
546
568
  const handler = filterHandler[index];
547
569
  let flag = true;
548
- if (flag && listenerCallBack && handler.originCallBack !== listenerCallBack) {
570
+ if (flag && listenerCallBack && handler.callback !== listenerCallBack) {
549
571
  // callback不同
550
572
  flag = false;
551
573
  }
@@ -564,7 +586,7 @@ class PopsDOMUtilsEvent {
564
586
  flag = false;
565
587
  }
566
588
  if (flag) {
567
- elementItem.removeEventListener(eventName, handler.callback, handler.option);
589
+ $elItem.removeEventListener(eventName, handler.handlerCallBack, handler.option);
568
590
  const findIndex = handlers.findIndex((item) => item === handler);
569
591
  if (findIndex !== -1) {
570
592
  handlers.splice(findIndex, 1);
@@ -576,7 +598,7 @@ class PopsDOMUtilsEvent {
576
598
  popsUtils.delete(elementEvents, eventType);
577
599
  }
578
600
  });
579
- Reflect.set(elementItem, SymbolEvents, elementEvents);
601
+ Reflect.set($elItem, SymbolEvents, elementEvents);
580
602
  });
581
603
  }
582
604
  /**
@@ -1077,7 +1099,7 @@ class PopsDOMUtilsEvent {
1077
1099
  * })
1078
1100
  */
1079
1101
  preventEvent(
1080
- $el: HTMLElement,
1102
+ $el: Element | Document | ShadowRoot,
1081
1103
  eventNameList: string | string[],
1082
1104
  option?: {
1083
1105
  /** (可选)是否捕获,默认false */
@@ -1108,7 +1130,7 @@ class PopsDOMUtilsEvent {
1108
1130
  * })
1109
1131
  */
1110
1132
  preventEvent(
1111
- $el: HTMLElement,
1133
+ $el: Element | Document | ShadowRoot,
1112
1134
  eventNameList: string | string[],
1113
1135
  selector: string | string[] | null | undefined,
1114
1136
  option?: {
@@ -1126,11 +1148,11 @@ class PopsDOMUtilsEvent {
1126
1148
  * 阻止事件的默认行为发生,并阻止事件传播
1127
1149
  */
1128
1150
  const stopEvent = (event: Event, onlyStopPropagation?: boolean) => {
1151
+ // 停止事件的传播,阻止它继续向更上层的元素冒泡,事件将不会再传播给其他的元素
1152
+ event?.stopPropagation();
1153
+ // 阻止事件传播,并且还能阻止元素上的其他事件处理程序被触发
1154
+ event?.stopImmediatePropagation();
1129
1155
  if (typeof onlyStopPropagation === "boolean" && onlyStopPropagation) {
1130
- // 停止事件的传播,阻止它继续向更上层的元素冒泡,事件将不会再传播给其他的元素
1131
- event?.stopPropagation();
1132
- // 阻止事件传播,并且还能阻止元素上的其他事件处理程序被触发
1133
- event?.stopImmediatePropagation();
1134
1156
  return;
1135
1157
  }
1136
1158
  // 阻止事件的默认行为发生。例如,当点击一个链接时,浏览器会默认打开链接的URL,或者在输入框内输入文字
@@ -1417,36 +1439,6 @@ class PopsDOMUtils extends PopsDOMUtilsEvent {
1417
1439
  getTransitionEndNameList() {
1418
1440
  return ["webkitTransitionEnd", "mozTransitionEnd", "MSTransitionEnd", "otransitionend", "transitionend"];
1419
1441
  }
1420
- /**
1421
- * 是否是隐藏状态
1422
- *
1423
- * 检测以下项:
1424
- *
1425
- * + `display`: none
1426
- * + `visibility`: hidden
1427
- * + `opacity`: 0
1428
- * + `使用了pops的自定义的隐藏class类`
1429
- * @param $el 需要检测的元素
1430
- */
1431
- isHide($el: Element) {
1432
- let flag = false;
1433
- if (
1434
- this.containsClassName($el, PopsCommonCSSClassName.hide) ||
1435
- this.containsClassName($el, PopsCommonCSSClassName.hideImportant)
1436
- ) {
1437
- flag = true;
1438
- } else {
1439
- if ($el instanceof HTMLElement) {
1440
- const style = $el.style;
1441
- flag = style.display.includes("none") || style.visibility.includes("hidden") || style.opacity !== "0";
1442
- }
1443
- if (!flag) {
1444
- const style = globalThis.getComputedStyle($el);
1445
- flag = style.display.includes("none") || style.visibility.includes("hidden") || style.opacity !== "0";
1446
- }
1447
- }
1448
- return flag;
1449
- }
1450
1442
  /**
1451
1443
  * 实现jQuery中的$().offset();
1452
1444
  * @param element
@@ -1,3 +1,4 @@
1
+ import { PopsCommonCSSClassName } from "../config/CommonCSSClassName";
1
2
  import { PopsInstData } from "../PopsInst";
2
3
  import type { PopsInstStoreType } from "../types/main";
3
4
  import { popsUtils } from "./PopsUtils";
@@ -82,4 +83,53 @@ export const PopsInstanceUtils = {
82
83
  }
83
84
  };
84
85
  },
86
+ /**
87
+ * 是否是隐藏状态
88
+ *
89
+ * 检测以下项:
90
+ *
91
+ * + `display`: none
92
+ * + `visibility`: hidden
93
+ * + `opacity`: 0
94
+ * + `使用了pops的自定义的隐藏class类`
95
+ * @param $el 需要检测的元素
96
+ */
97
+ isHide($el: Element) {
98
+ let flag = false;
99
+ if (
100
+ $el?.classList?.contains(PopsCommonCSSClassName.hide) ||
101
+ $el?.classList?.contains(PopsCommonCSSClassName.hideImportant)
102
+ ) {
103
+ flag = true;
104
+ } else {
105
+ if ($el instanceof HTMLElement) {
106
+ const style = $el.style;
107
+ flag = style.display.includes("none") || style.visibility.includes("hidden") || style.opacity !== "0";
108
+ }
109
+ if (!flag) {
110
+ const style = globalThis.getComputedStyle($el);
111
+ flag = style.display.includes("none") || style.visibility.includes("hidden") || style.opacity !== "0";
112
+ }
113
+ }
114
+ return flag;
115
+ },
116
+ /**
117
+ * 判断元素是否是在`.pops`内
118
+ * @param $el 目标元素
119
+ */
120
+ isNodeInPopsNode($el: Element) {
121
+ return !!($el.closest(".pops") || $el.matches(".pops"));
122
+ },
123
+ /**
124
+ * 判断是否是`.pops-anim`元素
125
+ * @param $el 目标元素
126
+ */
127
+ isAnimNode($el: Element) {
128
+ return !!(
129
+ $el?.localName?.toLowerCase() === "div" &&
130
+ $el.className &&
131
+ $el.className === "pops-anim" &&
132
+ $el.hasAttribute("anim")
133
+ );
134
+ },
85
135
  };
@@ -1,8 +1,8 @@
1
- import AnyTouch from "any-touch";
2
1
  import doubletap from "@any-touch/doubletap";
2
+ import AnyTouch from "any-touch";
3
+ import { EventEmiter } from "../event/EventEmiter";
3
4
  import { PopsCore } from "../PopsCore";
4
5
  import type { PopsUtilsOwnObject } from "../types/main";
5
- import { EventEmiter } from "../event/EventEmiter";
6
6
 
7
7
  class PopsUtils {
8
8
  /**
@@ -1,4 +0,0 @@
1
- /**
2
- * 存储在元素属性上的事件名
3
- */
4
- export declare const SymbolEvents: unique symbol;
@@ -1,4 +0,0 @@
1
- /**
2
- * 存储在元素属性上的事件名
3
- */
4
- export const SymbolEvents = Symbol("events_" + (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1));