@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.
- package/dist/index.amd.js +3913 -4128
- package/dist/index.amd.js.map +1 -1
- package/dist/index.amd.min.js +1 -1
- package/dist/index.amd.min.js.map +1 -1
- package/dist/index.cjs.js +195 -410
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.esm.js +195 -410
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/index.iife.js +3914 -4129
- package/dist/index.iife.js.map +1 -1
- package/dist/index.iife.min.js +1 -1
- package/dist/index.iife.min.js.map +1 -1
- package/dist/index.system.js +3918 -4133
- package/dist/index.system.js.map +1 -1
- package/dist/index.system.min.js +1 -1
- package/dist/index.system.min.js.map +1 -1
- package/dist/index.umd.js +3916 -4131
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/dist/types/src/CommonUtils.d.ts +0 -16
- package/dist/types/src/ElementAnimate.d.ts +1 -1
- package/dist/types/src/ElementEvent.d.ts +51 -23
- package/dist/types/src/ElementSelector.d.ts +2 -2
- package/dist/types/src/index.d.ts +23 -14
- package/dist/types/src/types/DOMUtilsEvent.d.ts +3 -3
- package/dist/types/src/types/env.d.ts +1 -0
- package/package.json +2 -2
- package/src/CommonUtils.ts +0 -54
- package/src/ElementAnimate.ts +3 -3
- package/src/ElementEvent.ts +99 -76
- package/src/ElementSelector.ts +8 -6
- package/src/ElementWait.ts +1 -2
- package/src/index.ts +164 -81
- package/src/types/DOMUtilsEvent.d.ts +3 -3
- package/src/types/env.d.ts +1 -0
package/src/ElementEvent.ts
CHANGED
|
@@ -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,
|
|
93
|
-
* console.log("事件触发", event,
|
|
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,
|
|
96
|
-
* console.log("事件触发", event,
|
|
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,
|
|
101
|
-
* console.log("事件触发", event,
|
|
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],
|
|
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,
|
|
124
|
-
* console.log("事件触发", event,
|
|
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,
|
|
127
|
-
* console.log("事件触发", event,
|
|
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,
|
|
132
|
-
* console.log("事件触发", event,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
312
|
-
|
|
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
|
|
336
|
-
* @param
|
|
327
|
+
* @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
|
|
328
|
+
* @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了$selector的没有值
|
|
337
329
|
*/
|
|
338
|
-
emit: (
|
|
339
|
-
that.emit($elList, eventTypeList,
|
|
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],
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
779
|
-
|
|
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
|
|
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
|
-
|
|
799
|
-
useDispatchToEmit?: boolean
|
|
802
|
+
useDispatchToTriggerEvent?: boolean
|
|
800
803
|
): void;
|
|
801
804
|
/**
|
|
802
805
|
* 主动触发事件
|
|
803
806
|
* @param element 需要触发的元素|元素数组|window
|
|
804
807
|
* @param eventType 需要触发的事件
|
|
805
|
-
* @param
|
|
806
|
-
* @param
|
|
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
|
-
|
|
819
|
-
|
|
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 (
|
|
849
|
-
event =
|
|
871
|
+
if (extraDetails && extraDetails instanceof Event) {
|
|
872
|
+
event = extraDetails;
|
|
850
873
|
} else {
|
|
851
874
|
// 构造事件
|
|
852
875
|
event = new Event(eventTypeItem);
|
|
853
|
-
if (
|
|
854
|
-
const detailKeys = Object.keys(
|
|
876
|
+
if (typeof extraDetails === "object" && extraDetails != null) {
|
|
877
|
+
const detailKeys = Object.keys(extraDetails);
|
|
855
878
|
detailKeys.forEach((keyName) => {
|
|
856
|
-
const value = Reflect.get(
|
|
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 (
|
|
885
|
+
if (useDispatchToTriggerEvent == false && eventTypeItem in elementEvents) {
|
|
863
886
|
// 直接调用监听的事件
|
|
864
|
-
elementEvents[eventTypeItem].forEach((eventsItem
|
|
865
|
-
eventsItem.
|
|
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?:
|
|
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,
|
|
1461
|
+
(evt, $selector) => {
|
|
1439
1462
|
this.preventEvent(evt);
|
|
1440
1463
|
if (evt.pointerType === "touch") {
|
|
1441
1464
|
isMobileTouch = true;
|
|
1442
1465
|
}
|
|
1443
|
-
|
|
1466
|
+
clearTimeout(timer);
|
|
1444
1467
|
timer = void 0;
|
|
1445
|
-
if (isDoubleClick && $click ===
|
|
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 =
|
|
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 =
|
|
1484
|
+
$click = $selector;
|
|
1462
1485
|
}
|
|
1463
1486
|
},
|
|
1464
1487
|
options
|
package/src/ElementSelector.ts
CHANGED
|
@@ -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
|
-
|
|
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, "");
|
package/src/ElementWait.ts
CHANGED
|
@@ -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
|
-
|
|
92
|
+
setTimeout(() => {
|
|
94
93
|
// 取消观察器
|
|
95
94
|
if (typeof observer?.disconnect === "function") {
|
|
96
95
|
observer.disconnect();
|