@whitesev/domutils 1.8.8 → 1.9.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.
Files changed (40) hide show
  1. package/dist/index.amd.js +3913 -4128
  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 +195 -410
  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 +195 -410
  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 +3914 -4129
  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 +3918 -4133
  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 +3916 -4131
  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/CommonUtils.d.ts +0 -16
  26. package/dist/types/src/ElementAnimate.d.ts +1 -1
  27. package/dist/types/src/ElementEvent.d.ts +51 -23
  28. package/dist/types/src/ElementSelector.d.ts +2 -2
  29. package/dist/types/src/index.d.ts +23 -14
  30. package/dist/types/src/types/DOMUtilsEvent.d.ts +3 -3
  31. package/dist/types/src/types/env.d.ts +1 -0
  32. package/package.json +2 -2
  33. package/src/CommonUtils.ts +0 -54
  34. package/src/ElementAnimate.ts +3 -3
  35. package/src/ElementEvent.ts +99 -76
  36. package/src/ElementSelector.ts +8 -6
  37. package/src/ElementWait.ts +1 -2
  38. package/src/index.ts +164 -81
  39. package/src/types/DOMUtilsEvent.d.ts +3 -3
  40. package/src/types/env.d.ts +1 -0
@@ -89,23 +89,23 @@ class ElementEvent extends ElementAnimate {
89
89
  * + passive 表示事件监听器是否不会调用preventDefault()。默认为false
90
90
  * @example
91
91
  * // 监听元素a.xx的click、tap、hover事件
92
- * DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event, selectorTarget)=>{
93
- * console.log("事件触发", event, selectorTarget)
92
+ * DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event, $selector)=>{
93
+ * console.log("事件触发", event, $selector)
94
94
  * })
95
- * DOMUtils.on("a.xx",["click","tap","hover"],(event, selectorTarget)=>{
96
- * console.log("事件触发", event, selectorTarget)
95
+ * DOMUtils.on("a.xx",["click","tap","hover"],(event, $selector)=>{
96
+ * console.log("事件触发", event, $selector)
97
97
  * })
98
98
  * @example
99
99
  * // 监听全局document下的子元素a.xx的click事件
100
- * DOMUtils.on(document,"click tap hover","a.xx",(event, selectorTarget)=>{
101
- * console.log("事件触发", event, selectorTarget)
100
+ * DOMUtils.on(document,"click tap hover","a.xx",(event, $selector)=>{
101
+ * console.log("事件触发", event, $selector)
102
102
  * })
103
103
  */
104
104
  on<T extends DOMUtils_EventType>(
105
105
  element: DOMUtilsElementEventType,
106
106
  eventType: T | T[],
107
107
  selector: string | string[] | undefined | null,
108
- handler: (this: HTMLElement, event: DOMUtils_Event[T], selectorTarget: HTMLElement) => void,
108
+ handler: (this: HTMLElement, event: DOMUtils_Event[T], $selector: HTMLElement) => void,
109
109
  option?: DOMUtilsEventListenerOption | boolean
110
110
  ): DOMUtilsAddEventListenerResult;
111
111
  /**
@@ -120,38 +120,30 @@ class ElementEvent extends ElementAnimate {
120
120
  * + passive 表示事件监听器是否不会调用preventDefault()。默认为false
121
121
  * @example
122
122
  * // 监听元素a.xx的click、tap、hover事件
123
- * DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event, selectorTarget)=>{
124
- * console.log("事件触发", event, selectorTarget)
123
+ * DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event, $selector)=>{
124
+ * console.log("事件触发", event, $selector)
125
125
  * })
126
- * DOMUtils.on("a.xx",["click","tap","hover"],(event, selectorTarget)=>{
127
- * console.log("事件触发", event, selectorTarget)
126
+ * DOMUtils.on("a.xx",["click","tap","hover"],(event, $selector)=>{
127
+ * console.log("事件触发", event, $selector)
128
128
  * })
129
129
  * @example
130
130
  * // 监听全局document下的子元素a.xx的click事件
131
- * DOMUtils.on(document,"click tap hover","a.xx",(event, selectorTarget)=>{
132
- * console.log("事件触发", event, selectorTarget)
131
+ * DOMUtils.on(document,"click tap hover","a.xx",(event, $selector)=>{
132
+ * console.log("事件触发", event, $selector)
133
133
  * })
134
134
  */
135
135
  on<T extends Event>(
136
136
  element: DOMUtilsElementEventType,
137
137
  eventType: string | string[],
138
138
  selector: string | string[] | undefined | null,
139
- handler: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void,
139
+ handler: (this: HTMLElement, event: T, $selector: HTMLElement) => void,
140
140
  option?: DOMUtilsEventListenerOption | boolean
141
141
  ): DOMUtilsAddEventListenerResult;
142
142
  on<T extends Event>(
143
143
  element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis,
144
144
  eventType: DOMUtils_EventType | DOMUtils_EventType[] | string | string[],
145
- selector:
146
- | string
147
- | string[]
148
- | undefined
149
- | ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
150
- | null,
151
- callback?:
152
- | ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
153
- | DOMUtilsEventListenerOption
154
- | boolean,
145
+ selector: string | string[] | undefined | ((this: HTMLElement, event: T, $selector: HTMLElement) => void) | null,
146
+ callback?: ((this: HTMLElement, event: T, $selector: HTMLElement) => void) | DOMUtilsEventListenerOption | boolean,
155
147
  option?: DOMUtilsEventListenerOption | boolean
156
148
  ): DOMUtilsAddEventListenerResult {
157
149
  /**
@@ -218,7 +210,7 @@ class ElementEvent extends ElementAnimate {
218
210
  selectorList.push(selector);
219
211
  }
220
212
  // 事件回调
221
- let listenerCallBack: (this: HTMLElement, event: Event, selectorTarget?: HTMLElement) => void = callback as any;
213
+ let listenerCallBack: (this: HTMLElement, event: Event, $selector?: HTMLElement) => void = callback as any;
222
214
  // 事件配置
223
215
  let listenerOption: DOMUtilsEventListenerOption = {
224
216
  capture: false,
@@ -238,17 +230,17 @@ class ElementEvent extends ElementAnimate {
238
230
  /**
239
231
  * 如果是once,那么删除该监听和元素上的事件和监听
240
232
  */
241
- function checkOptionOnceToRemoveEventListener() {
233
+ const checkOptionOnceToRemoveEventListener = () => {
242
234
  if (listenerOption.once) {
243
235
  that.off(element, eventType as any, selector as any, callback as any, option);
244
236
  }
245
- }
237
+ };
246
238
  $elList.forEach((elementItem) => {
247
239
  /**
248
240
  * 事件回调
249
241
  * @param event
250
242
  */
251
- function domUtilsEventCallBack(event: Event) {
243
+ const handlerCallBack = function (event: Event) {
252
244
  if (selectorList.length) {
253
245
  /* 存在子元素选择器 */
254
246
  // 这时候的this和target都是子元素选择器的元素
@@ -294,11 +286,11 @@ class ElementEvent extends ElementAnimate {
294
286
  listenerCallBack.call(elementItem as HTMLElement, event as any);
295
287
  checkOptionOnceToRemoveEventListener();
296
288
  }
297
- }
289
+ };
298
290
 
299
291
  /* 遍历事件名设置元素事件 */
300
292
  eventTypeList.forEach((eventName) => {
301
- elementItem.addEventListener(eventName, domUtilsEventCallBack, listenerOption);
293
+ elementItem.addEventListener(eventName, handlerCallBack, listenerOption);
302
294
  /* 获取对象上的事件 */
303
295
  const elementEvents: {
304
296
  [k: string]: DOMUtilsEventListenerOptionsAttribute[];
@@ -308,8 +300,8 @@ class ElementEvent extends ElementAnimate {
308
300
  elementEvents[eventName].push({
309
301
  selector: selectorList,
310
302
  option: listenerOption,
311
- callback: domUtilsEventCallBack,
312
- originCallBack: listenerCallBack,
303
+ handlerCallBack: handlerCallBack,
304
+ callback: listenerCallBack,
313
305
  });
314
306
  /* 覆盖事件 */
315
307
  Reflect.set(elementItem, GlobalData.domEventSymbol, elementEvents);
@@ -332,11 +324,11 @@ class ElementEvent extends ElementAnimate {
332
324
  },
333
325
  /**
334
326
  * 主动触发事件
335
- * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
336
- * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
327
+ * @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
328
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了$selector的没有值
337
329
  */
338
- emit: (details?: object, useDispatchToEmit?: boolean) => {
339
- that.emit($elList, eventTypeList, details, useDispatchToEmit);
330
+ emit: (extraDetails?: object, useDispatchToTriggerEvent?: boolean) => {
331
+ that.emit($elList, eventTypeList, extraDetails, useDispatchToTriggerEvent);
340
332
  },
341
333
  };
342
334
  }
@@ -406,7 +398,7 @@ class ElementEvent extends ElementAnimate {
406
398
  element: DOMUtilsElementEventType,
407
399
  eventType: T | T[],
408
400
  selector?: string | string[] | undefined | null,
409
- callback?: (this: HTMLElement, event: DOMUtils_Event[T], selectorTarget: HTMLElement) => void,
401
+ callback?: (this: HTMLElement, event: DOMUtils_Event[T], $selector: HTMLElement) => void,
410
402
  option?: EventListenerOptions | boolean,
411
403
  filter?: (
412
404
  value: DOMUtilsEventListenerOptionsAttribute,
@@ -432,7 +424,7 @@ class ElementEvent extends ElementAnimate {
432
424
  element: DOMUtilsElementEventType,
433
425
  eventType: string | string[],
434
426
  selector?: string | string[] | undefined | null,
435
- callback?: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void,
427
+ callback?: (this: HTMLElement, event: T, $selector: HTMLElement) => void,
436
428
  option?: EventListenerOptions | boolean,
437
429
  filter?: (
438
430
  value: DOMUtilsEventListenerOptionsAttribute,
@@ -443,13 +435,8 @@ class ElementEvent extends ElementAnimate {
443
435
  off<T extends Event>(
444
436
  element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis,
445
437
  eventType: DOMUtils_EventType | DOMUtils_EventType[] | string | string[],
446
- selector:
447
- | string
448
- | string[]
449
- | undefined
450
- | ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
451
- | null,
452
- callback?: ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void) | EventListenerOptions | boolean,
438
+ selector: string | string[] | undefined | ((this: HTMLElement, event: T, $selector: HTMLElement) => void) | null,
439
+ callback?: ((this: HTMLElement, event: T, $selector: HTMLElement) => void) | EventListenerOptions | boolean,
453
440
  option?:
454
441
  | EventListenerOptions
455
442
  | boolean
@@ -511,7 +498,7 @@ class ElementEvent extends ElementAnimate {
511
498
  /**
512
499
  * 事件的回调函数
513
500
  */
514
- let listenerCallBack: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void = callback as any;
501
+ let listenerCallBack: (this: HTMLElement, event: T, $selector: HTMLElement) => void = callback as any;
515
502
 
516
503
  /**
517
504
  * 事件的配置
@@ -556,7 +543,7 @@ class ElementEvent extends ElementAnimate {
556
543
  for (let index = 0; index < filterHandler.length; index++) {
557
544
  const handler = filterHandler[index];
558
545
  let flag = true;
559
- if (flag && listenerCallBack && handler.originCallBack !== listenerCallBack) {
546
+ if (flag && listenerCallBack && handler.callback !== listenerCallBack) {
560
547
  // callback不同
561
548
  flag = false;
562
549
  }
@@ -575,7 +562,7 @@ class ElementEvent extends ElementAnimate {
575
562
  flag = false;
576
563
  }
577
564
  if (flag || isRemoveAll) {
578
- $elItem.removeEventListener(eventName, handler.callback, handler.option);
565
+ $elItem.removeEventListener(eventName, handler.handlerCallBack, handler.option);
579
566
  const findIndex = handlers.findIndex((item) => item === handler);
580
567
  if (findIndex !== -1) {
581
568
  handlers.splice(findIndex, 1);
@@ -644,7 +631,7 @@ class ElementEvent extends ElementAnimate {
644
631
  return;
645
632
  }
646
633
  for (const handler of handlers) {
647
- $elItem.removeEventListener(eventName, handler.callback, {
634
+ $elItem.removeEventListener(eventName, handler.handlerCallBack, {
648
635
  capture: handler["option"]["capture"],
649
636
  });
650
637
  }
@@ -743,7 +730,7 @@ class ElementEvent extends ElementAnimate {
743
730
  function check() {
744
731
  if (checkDOMReadyState()) {
745
732
  /* 检查document状态 */
746
- CommonUtils.setTimeout(completed, 0);
733
+ setTimeout(completed, 0);
747
734
  } else {
748
735
  /* 添加监听 */
749
736
  addDomReadyListener();
@@ -762,8 +749,7 @@ class ElementEvent extends ElementAnimate {
762
749
  * 主动触发事件
763
750
  * @param element 需要触发的元素|元素数组|window
764
751
  * @param eventType 需要触发的事件
765
- * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
766
- * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
752
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用通过.on监听的callback,但是这种会让使用了$selector的没有值
767
753
  * @example
768
754
  * // 触发元素a.xx的click事件
769
755
  * DOMUtils.emit(document.querySelector("a.xx"),"click")
@@ -775,15 +761,33 @@ class ElementEvent extends ElementAnimate {
775
761
  emit(
776
762
  element: DOMUtilsTargetElementType | Element | DocumentFragment | any[] | typeof globalThis | Window | Document,
777
763
  eventType: string | string[],
778
- details?: object,
779
- useDispatchToEmit?: boolean
764
+ useDispatchToTriggerEvent?: boolean
765
+ ): void;
766
+ /**
767
+ * 主动触发事件
768
+ * @param element 需要触发的元素|元素数组|window
769
+ * @param eventType 需要触发的事件
770
+ * @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
771
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用通过.on监听的callback(),但是这种只有一个入参,如果使用$selector则没有值
772
+ * @example
773
+ * // 触发元素a.xx的click事件
774
+ * DOMUtils.emit(document.querySelector("a.xx"),"click")
775
+ * DOMUtils.emit("a.xx","click")
776
+ * // 触发元素a.xx的click、tap、hover事件
777
+ * DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
778
+ * DOMUtils.emit("a.xx",["click","tap","hover"])
779
+ */
780
+ emit(
781
+ element: DOMUtilsTargetElementType | Element | DocumentFragment | any[] | typeof globalThis | Window | Document,
782
+ eventType: string | string[],
783
+ extraDetails?: object,
784
+ useDispatchToTriggerEvent?: boolean
780
785
  ): void;
781
786
  /**
782
787
  * 主动触发事件
783
788
  * @param element 需要触发的元素|元素数组|window
784
789
  * @param eventType 需要触发的事件
785
- * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
786
- * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
790
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用通过.on监听的callback(),但是这种只有一个入参,如果使用$selector则没有值
787
791
  * @example
788
792
  * // 触发元素a.xx的click事件
789
793
  * DOMUtils.emit(document.querySelector("a.xx"),"click")
@@ -795,15 +799,34 @@ class ElementEvent extends ElementAnimate {
795
799
  emit(
796
800
  element: Element | string | NodeList | any[] | Window | Document,
797
801
  eventType: DOMUtils_EventType | DOMUtils_EventType[],
798
- details?: object,
799
- useDispatchToEmit?: boolean
802
+ useDispatchToTriggerEvent?: boolean
800
803
  ): void;
801
804
  /**
802
805
  * 主动触发事件
803
806
  * @param element 需要触发的元素|元素数组|window
804
807
  * @param eventType 需要触发的事件
805
- * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
806
- * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
808
+ * @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
809
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用通过.on监听的callback(),但是这种只有一个入参,如果使用$selector则没有值
810
+ * @example
811
+ * // 触发元素a.xx的click事件
812
+ * DOMUtils.emit(document.querySelector("a.xx"),"click")
813
+ * DOMUtils.emit("a.xx","click")
814
+ * // 触发元素a.xx的click、tap、hover事件
815
+ * DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
816
+ * DOMUtils.emit("a.xx",["click","tap","hover"])
817
+ */
818
+ emit(
819
+ element: Element | string | NodeList | any[] | Window | Document,
820
+ eventType: DOMUtils_EventType | DOMUtils_EventType[],
821
+ extraDetails?: object,
822
+ useDispatchToTriggerEvent?: boolean
823
+ ): void;
824
+ /**
825
+ * 主动触发事件
826
+ * @param element 需要触发的元素|元素数组|window
827
+ * @param eventType 需要触发的事件
828
+ * @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
829
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用通过.on监听的callback(),但是这种只有一个入参,如果使用$selector则没有值
807
830
  * @example
808
831
  * // 触发元素a.xx的click事件
809
832
  * DOMUtils.emit(document.querySelector("a.xx"),"click")
@@ -815,8 +838,8 @@ class ElementEvent extends ElementAnimate {
815
838
  emit(
816
839
  element: Element | string | NodeList | any[] | Window | Document,
817
840
  eventType: DOMUtils_EventType | DOMUtils_EventType[] | string | string[],
818
- details?: object,
819
- useDispatchToEmit: boolean = true
841
+ extraDetails?: object | boolean,
842
+ useDispatchToTriggerEvent: boolean = true
820
843
  ) {
821
844
  const that = this;
822
845
  if (typeof element === "string") {
@@ -845,24 +868,24 @@ class ElementEvent extends ElementAnimate {
845
868
  } = Reflect.get($elItem, GlobalData.domEventSymbol) || {};
846
869
  eventTypeList.forEach((eventTypeItem) => {
847
870
  let event: Event = null as any;
848
- if (details && details instanceof Event) {
849
- event = details;
871
+ if (extraDetails && extraDetails instanceof Event) {
872
+ event = extraDetails;
850
873
  } else {
851
874
  // 构造事件
852
875
  event = new Event(eventTypeItem);
853
- if (details) {
854
- const detailKeys = Object.keys(details);
876
+ if (typeof extraDetails === "object" && extraDetails != null) {
877
+ const detailKeys = Object.keys(extraDetails);
855
878
  detailKeys.forEach((keyName) => {
856
- const value = Reflect.get(details, keyName);
879
+ const value = Reflect.get(extraDetails, keyName);
857
880
  // 在event上添加属性
858
881
  Reflect.set(event, keyName, value);
859
882
  });
860
883
  }
861
884
  }
862
- if (useDispatchToEmit == false && eventTypeItem in elementEvents) {
885
+ if (useDispatchToTriggerEvent == false && eventTypeItem in elementEvents) {
863
886
  // 直接调用监听的事件
864
- elementEvents[eventTypeItem].forEach((eventsItem: any) => {
865
- eventsItem.callback(event);
887
+ elementEvents[eventTypeItem].forEach((eventsItem) => {
888
+ eventsItem.handlerCallBack(event);
866
889
  });
867
890
  } else {
868
891
  $elItem.dispatchEvent(event);
@@ -888,7 +911,7 @@ class ElementEvent extends ElementAnimate {
888
911
  click(
889
912
  element: DOMUtilsTargetElementType | Element | DocumentFragment | typeof globalThis | Window,
890
913
  handler?: (this: HTMLElement, event: DOMUtils_Event["click"]) => void,
891
- details?: any,
914
+ details?: object,
892
915
  useDispatchToEmit?: boolean
893
916
  ) {
894
917
  const that = this;
@@ -1435,14 +1458,14 @@ class ElementEvent extends ElementAnimate {
1435
1458
  $el,
1436
1459
  "pointerup",
1437
1460
  selector,
1438
- (evt, selectorTarget) => {
1461
+ (evt, $selector) => {
1439
1462
  this.preventEvent(evt);
1440
1463
  if (evt.pointerType === "touch") {
1441
1464
  isMobileTouch = true;
1442
1465
  }
1443
- CommonUtils.clearTimeout(timer);
1466
+ clearTimeout(timer);
1444
1467
  timer = void 0;
1445
- if (isDoubleClick && $click === selectorTarget) {
1468
+ if (isDoubleClick && $click === $selector) {
1446
1469
  isDoubleClick = false;
1447
1470
  $click = null;
1448
1471
  /* 判定为双击 */
@@ -1450,7 +1473,7 @@ class ElementEvent extends ElementAnimate {
1450
1473
  isDoubleClick: true,
1451
1474
  });
1452
1475
  } else {
1453
- timer = CommonUtils.setTimeout(() => {
1476
+ timer = setTimeout(() => {
1454
1477
  isDoubleClick = false;
1455
1478
  // 判断为单击
1456
1479
  dblclick_handler(evt, {
@@ -1458,7 +1481,7 @@ class ElementEvent extends ElementAnimate {
1458
1481
  });
1459
1482
  }, checkClickTime);
1460
1483
  isDoubleClick = true;
1461
- $click = selectorTarget;
1484
+ $click = $selector;
1462
1485
  }
1463
1486
  },
1464
1487
  options
@@ -160,9 +160,8 @@ class ElementSelector {
160
160
  */
161
161
  matches($el: HTMLElement | Element | null | undefined, selector: string): boolean {
162
162
  selector = selector.trim();
163
- if ($el == null) {
164
- return false;
165
- }
163
+ if ($el == null) return false;
164
+ if ($el instanceof Document) return false;
166
165
 
167
166
  if (selector.match(/[^\s]{1}:empty$/gi)) {
168
167
  // empty 语法
@@ -224,13 +223,16 @@ class ElementSelector {
224
223
  * > null
225
224
  */
226
225
  closest<K extends keyof HTMLElementTagNameMap>(
227
- $el: HTMLElement | Element,
226
+ $el: HTMLElement | Element | null | undefined,
228
227
  selector: string
229
228
  ): HTMLElementTagNameMap[K] | null;
230
- closest<E extends Element = Element>($el: HTMLElement | Element, selector: string): E | null;
231
- closest<E extends Element = Element>($el: HTMLElement | Element, selector: string): E | null {
229
+ closest<E extends Element = Element>($el: HTMLElement | Element | null | undefined, selector: string): E | null;
230
+ closest<E extends Element = Element>($el: HTMLElement | Element | null | undefined, selector: string): E | null {
232
231
  selector = selector.trim();
233
232
 
233
+ if ($el == null) return null;
234
+ if ($el instanceof Document) return null;
235
+
234
236
  if (selector.match(/[^\s]{1}:empty$/gi)) {
235
237
  // empty 语法
236
238
  selector = selector.replace(/:empty$/gi, "");
@@ -1,4 +1,3 @@
1
- import { CommonUtils } from "./CommonUtils";
2
1
  import { ElementSelector, elementSelector } from "./ElementSelector";
3
2
  import type { WindowApiOption } from "./types/WindowApi";
4
3
  import { utils } from "./Utils";
@@ -90,7 +89,7 @@ class ElementWait extends ElementSelector {
90
89
  },
91
90
  });
92
91
  if (__timeout__ > 0) {
93
- CommonUtils.setTimeout(() => {
92
+ setTimeout(() => {
94
93
  // 取消观察器
95
94
  if (typeof observer?.disconnect === "function") {
96
95
  observer.disconnect();