@whitesev/domutils 1.5.11 → 1.6.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.
- package/dist/index.amd.js +129 -75
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +129 -75
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +129 -75
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +129 -75
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +129 -75
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +129 -75
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/DOMUtils.d.ts +16 -12
- package/dist/types/src/DOMUtilsCommonUtils.d.ts +4 -0
- package/dist/types/src/DOMUtilsEvent.d.ts +18 -0
- package/dist/types/src/types/DOMUtilsEvent.d.ts +2 -1
- package/package.json +5 -3
- package/src/DOMUtils.ts +98 -254
- package/src/DOMUtilsCommonUtils.ts +9 -4
- package/src/DOMUtilsData.ts +1 -3
- package/src/DOMUtilsEvent.ts +121 -178
- package/src/types/DOMUtilsEvent.d.ts +2 -1
|
@@ -50,10 +50,7 @@ const DOMUtilsCommonUtils = {
|
|
|
50
50
|
*/
|
|
51
51
|
showElement(element: HTMLElement) {
|
|
52
52
|
let dupNode = element.cloneNode(true) as HTMLElement;
|
|
53
|
-
dupNode.setAttribute(
|
|
54
|
-
"style",
|
|
55
|
-
"visibility: hidden !important;display:block !important;"
|
|
56
|
-
);
|
|
53
|
+
dupNode.setAttribute("style", "visibility: hidden !important;display:block !important;");
|
|
57
54
|
this.windowApi.document.documentElement.appendChild(dupNode);
|
|
58
55
|
return {
|
|
59
56
|
/**
|
|
@@ -191,5 +188,13 @@ const DOMUtilsCommonUtils = {
|
|
|
191
188
|
isNodeList($ele: any): $ele is any[] | NodeList {
|
|
192
189
|
return Array.isArray($ele) || $ele instanceof NodeList;
|
|
193
190
|
},
|
|
191
|
+
/** 获取 animationend 在各个浏览器的兼容名 */
|
|
192
|
+
getAnimationEndNameList() {
|
|
193
|
+
return ["webkitAnimationEnd", "mozAnimationEnd", "MSAnimationEnd", "oanimationend", "animationend"];
|
|
194
|
+
},
|
|
195
|
+
/** 获取 transitionend 在各个浏览器的兼容名 */
|
|
196
|
+
getTransitionEndNameList() {
|
|
197
|
+
return ["webkitTransitionEnd", "mozTransitionEnd", "MSTransitionEnd", "otransitionend", "transitionend"];
|
|
198
|
+
},
|
|
194
199
|
};
|
|
195
200
|
export { DOMUtilsCommonUtils };
|
package/src/DOMUtilsData.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/* 数据 */
|
|
2
2
|
const DOMUtilsData = {
|
|
3
3
|
/** .on添加在元素存储的事件 */
|
|
4
|
-
SymbolEvents: Symbol(
|
|
5
|
-
"events_" + (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
|
|
6
|
-
),
|
|
4
|
+
SymbolEvents: Symbol("events_" + (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)),
|
|
7
5
|
};
|
|
8
6
|
|
|
9
7
|
export { DOMUtilsData };
|
package/src/DOMUtilsEvent.ts
CHANGED
|
@@ -93,11 +93,7 @@ export class DOMUtilsEvent {
|
|
|
93
93
|
element: DOMUtilsElementEventType,
|
|
94
94
|
eventType: T | T[],
|
|
95
95
|
selector: string | string[] | undefined | null,
|
|
96
|
-
callback: (
|
|
97
|
-
this: HTMLElement,
|
|
98
|
-
event: DOMUtils_Event[T],
|
|
99
|
-
selectorTarget: HTMLElement
|
|
100
|
-
) => void,
|
|
96
|
+
callback: (this: HTMLElement, event: DOMUtils_Event[T], selectorTarget: HTMLElement) => void,
|
|
101
97
|
option?: DOMUtilsEventListenerOption | boolean
|
|
102
98
|
): void;
|
|
103
99
|
/**
|
|
@@ -128,11 +124,7 @@ export class DOMUtilsEvent {
|
|
|
128
124
|
element: DOMUtilsElementEventType,
|
|
129
125
|
eventType: string | string[],
|
|
130
126
|
selector: string | string[] | undefined | null,
|
|
131
|
-
callback: (
|
|
132
|
-
this: HTMLElement,
|
|
133
|
-
event: T,
|
|
134
|
-
selectorTarget: HTMLElement
|
|
135
|
-
) => void,
|
|
127
|
+
callback: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void,
|
|
136
128
|
option?: DOMUtilsEventListenerOption | boolean
|
|
137
129
|
): void;
|
|
138
130
|
on<T extends Event>(
|
|
@@ -165,11 +157,7 @@ export class DOMUtilsEvent {
|
|
|
165
157
|
* @param startIndex
|
|
166
158
|
* @param option
|
|
167
159
|
*/
|
|
168
|
-
function getOption(
|
|
169
|
-
args: IArguments,
|
|
170
|
-
startIndex: number,
|
|
171
|
-
option: DOMUtilsEventListenerOption
|
|
172
|
-
) {
|
|
160
|
+
function getOption(args: IArguments, startIndex: number, option: DOMUtilsEventListenerOption) {
|
|
173
161
|
let currentParam = args[startIndex];
|
|
174
162
|
if (typeof currentParam === "boolean") {
|
|
175
163
|
option.capture = currentParam;
|
|
@@ -214,8 +202,7 @@ export class DOMUtilsEvent {
|
|
|
214
202
|
if (Array.isArray(eventType)) {
|
|
215
203
|
eventTypeList = eventTypeList.concat(
|
|
216
204
|
eventType.filter(
|
|
217
|
-
(eventTypeItem) =>
|
|
218
|
-
typeof eventTypeItem === "string" && eventTypeItem.toString() !== ""
|
|
205
|
+
(eventTypeItem) => typeof eventTypeItem === "string" && eventTypeItem.toString() !== ""
|
|
219
206
|
)
|
|
220
207
|
);
|
|
221
208
|
} else if (typeof eventType === "string") {
|
|
@@ -227,20 +214,14 @@ export class DOMUtilsEvent {
|
|
|
227
214
|
let selectorList: string[] = [];
|
|
228
215
|
if (Array.isArray(selector)) {
|
|
229
216
|
selectorList = selectorList.concat(
|
|
230
|
-
selector.filter(
|
|
231
|
-
(selectorItem) =>
|
|
232
|
-
typeof selectorItem === "string" && selectorItem.toString() !== ""
|
|
233
|
-
)
|
|
217
|
+
selector.filter((selectorItem) => typeof selectorItem === "string" && selectorItem.toString() !== "")
|
|
234
218
|
);
|
|
235
219
|
} else if (typeof selector === "string") {
|
|
236
220
|
selectorList.push(selector);
|
|
237
221
|
}
|
|
238
222
|
// 事件回调
|
|
239
|
-
let listenerCallBack: (
|
|
240
|
-
|
|
241
|
-
event: Event,
|
|
242
|
-
selectorTarget?: HTMLElement
|
|
243
|
-
) => void = callback as any;
|
|
223
|
+
let listenerCallBack: (this: HTMLElement, event: Event, selectorTarget?: HTMLElement) => void =
|
|
224
|
+
callback as any;
|
|
244
225
|
// 事件配置
|
|
245
226
|
let listenerOption: DOMUtilsEventListenerOption = {
|
|
246
227
|
capture: false,
|
|
@@ -262,13 +243,7 @@ export class DOMUtilsEvent {
|
|
|
262
243
|
*/
|
|
263
244
|
function checkOptionOnceToRemoveEventListener() {
|
|
264
245
|
if (listenerOption.once) {
|
|
265
|
-
DOMUtilsContext.off(
|
|
266
|
-
element,
|
|
267
|
-
eventType as any,
|
|
268
|
-
selector as any,
|
|
269
|
-
callback as any,
|
|
270
|
-
option
|
|
271
|
-
);
|
|
246
|
+
DOMUtilsContext.off(element, eventType as any, selector as any, callback as any, option);
|
|
272
247
|
}
|
|
273
248
|
}
|
|
274
249
|
elementList.forEach((elementItem) => {
|
|
@@ -285,10 +260,7 @@ export class DOMUtilsEvent {
|
|
|
285
260
|
: (event.target as HTMLElement);
|
|
286
261
|
let totalParent = elementItem;
|
|
287
262
|
if (DOMUtilsCommonUtils.isWin(totalParent)) {
|
|
288
|
-
if (
|
|
289
|
-
totalParent ===
|
|
290
|
-
(DOMUtilsContext.windowApi.document as any as HTMLElement)
|
|
291
|
-
) {
|
|
263
|
+
if (totalParent === (DOMUtilsContext.windowApi.document as any as HTMLElement)) {
|
|
292
264
|
totalParent = DOMUtilsContext.windowApi.document.documentElement;
|
|
293
265
|
}
|
|
294
266
|
}
|
|
@@ -299,10 +271,7 @@ export class DOMUtilsEvent {
|
|
|
299
271
|
return true;
|
|
300
272
|
}
|
|
301
273
|
/* 在上层与主元素之间寻找可以被selector所匹配到的 */
|
|
302
|
-
let $closestMatches = DOMUtilsContext.closest<HTMLElement>(
|
|
303
|
-
eventTarget,
|
|
304
|
-
selectorItem
|
|
305
|
-
);
|
|
274
|
+
let $closestMatches = DOMUtilsContext.closest<HTMLElement>(eventTarget, selectorItem);
|
|
306
275
|
if ($closestMatches && totalParent?.contains($closestMatches)) {
|
|
307
276
|
eventTarget = $closestMatches;
|
|
308
277
|
return true;
|
|
@@ -330,11 +299,7 @@ export class DOMUtilsEvent {
|
|
|
330
299
|
|
|
331
300
|
/* 遍历事件名设置元素事件 */
|
|
332
301
|
eventTypeList.forEach((eventName) => {
|
|
333
|
-
elementItem.addEventListener(
|
|
334
|
-
eventName,
|
|
335
|
-
domUtilsEventCallBack,
|
|
336
|
-
listenerOption
|
|
337
|
-
);
|
|
302
|
+
elementItem.addEventListener(eventName, domUtilsEventCallBack, listenerOption);
|
|
338
303
|
/* 获取对象上的事件 */
|
|
339
304
|
let elementEvents: {
|
|
340
305
|
[k: string]: DOMUtilsEventListenerOptionsAttribute[];
|
|
@@ -418,11 +383,7 @@ export class DOMUtilsEvent {
|
|
|
418
383
|
element: DOMUtilsElementEventType,
|
|
419
384
|
eventType: T | T[],
|
|
420
385
|
selector?: string | string[] | undefined | null,
|
|
421
|
-
callback?: (
|
|
422
|
-
this: HTMLElement,
|
|
423
|
-
event: DOMUtils_Event[T],
|
|
424
|
-
selectorTarget: HTMLElement
|
|
425
|
-
) => void,
|
|
386
|
+
callback?: (this: HTMLElement, event: DOMUtils_Event[T], selectorTarget: HTMLElement) => void,
|
|
426
387
|
option?: EventListenerOptions | boolean,
|
|
427
388
|
filter?: (
|
|
428
389
|
value: DOMUtilsEventListenerOptionsAttribute,
|
|
@@ -448,11 +409,7 @@ export class DOMUtilsEvent {
|
|
|
448
409
|
element: DOMUtilsElementEventType,
|
|
449
410
|
eventType: string | string[],
|
|
450
411
|
selector?: string | string[] | undefined | null,
|
|
451
|
-
callback?: (
|
|
452
|
-
this: HTMLElement,
|
|
453
|
-
event: T,
|
|
454
|
-
selectorTarget: HTMLElement
|
|
455
|
-
) => void,
|
|
412
|
+
callback?: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void,
|
|
456
413
|
option?: EventListenerOptions | boolean,
|
|
457
414
|
filter?: (
|
|
458
415
|
value: DOMUtilsEventListenerOptionsAttribute,
|
|
@@ -502,18 +459,11 @@ export class DOMUtilsEvent {
|
|
|
502
459
|
* @param startIndex
|
|
503
460
|
* @param option
|
|
504
461
|
*/
|
|
505
|
-
function getOption(
|
|
506
|
-
args1: IArguments,
|
|
507
|
-
startIndex: number,
|
|
508
|
-
option: EventListenerOptions
|
|
509
|
-
) {
|
|
462
|
+
function getOption(args1: IArguments, startIndex: number, option: EventListenerOptions) {
|
|
510
463
|
let currentParam: EventListenerOptions | boolean = args1[startIndex];
|
|
511
464
|
if (typeof currentParam === "boolean") {
|
|
512
465
|
option.capture = currentParam;
|
|
513
|
-
} else if (
|
|
514
|
-
typeof currentParam === "object" &&
|
|
515
|
-
"capture" in currentParam
|
|
516
|
-
) {
|
|
466
|
+
} else if (typeof currentParam === "object" && "capture" in currentParam) {
|
|
517
467
|
option.capture = currentParam.capture;
|
|
518
468
|
}
|
|
519
469
|
return option;
|
|
@@ -537,8 +487,7 @@ export class DOMUtilsEvent {
|
|
|
537
487
|
if (Array.isArray(eventType)) {
|
|
538
488
|
eventTypeList = eventTypeList.concat(
|
|
539
489
|
eventType.filter(
|
|
540
|
-
(eventTypeItem) =>
|
|
541
|
-
typeof eventTypeItem === "string" && eventTypeItem.toString() !== ""
|
|
490
|
+
(eventTypeItem) => typeof eventTypeItem === "string" && eventTypeItem.toString() !== ""
|
|
542
491
|
)
|
|
543
492
|
);
|
|
544
493
|
} else if (typeof eventType === "string") {
|
|
@@ -550,10 +499,7 @@ export class DOMUtilsEvent {
|
|
|
550
499
|
let selectorList: string[] = [];
|
|
551
500
|
if (Array.isArray(selector)) {
|
|
552
501
|
selectorList = selectorList.concat(
|
|
553
|
-
selector.filter(
|
|
554
|
-
(selectorItem) =>
|
|
555
|
-
typeof selectorItem === "string" && selectorItem.toString() !== ""
|
|
556
|
-
)
|
|
502
|
+
selector.filter((selectorItem) => typeof selectorItem === "string" && selectorItem.toString() !== "")
|
|
557
503
|
);
|
|
558
504
|
} else if (typeof selector === "string") {
|
|
559
505
|
selectorList.push(selector);
|
|
@@ -561,11 +507,8 @@ export class DOMUtilsEvent {
|
|
|
561
507
|
/**
|
|
562
508
|
* 事件的回调函数
|
|
563
509
|
*/
|
|
564
|
-
let listenerCallBack: (
|
|
565
|
-
|
|
566
|
-
event: T,
|
|
567
|
-
selectorTarget: HTMLElement
|
|
568
|
-
) => void = callback as any;
|
|
510
|
+
let listenerCallBack: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void =
|
|
511
|
+
callback as any;
|
|
569
512
|
|
|
570
513
|
/**
|
|
571
514
|
* 事件的配置
|
|
@@ -587,10 +530,7 @@ export class DOMUtilsEvent {
|
|
|
587
530
|
if (args.length === 2) {
|
|
588
531
|
// 目标函数、事件名
|
|
589
532
|
isRemoveAll = true;
|
|
590
|
-
} else if (
|
|
591
|
-
(args.length === 3 && typeof args[2] === "string") ||
|
|
592
|
-
Array.isArray(args[2])
|
|
593
|
-
) {
|
|
533
|
+
} else if ((args.length === 3 && typeof args[2] === "string") || Array.isArray(args[2])) {
|
|
594
534
|
// 目标函数、事件名、子元素选择器
|
|
595
535
|
isRemoveAll = true;
|
|
596
536
|
}
|
|
@@ -607,18 +547,12 @@ export class DOMUtilsEvent {
|
|
|
607
547
|
for (let index = 0; index < handlers.length; index++) {
|
|
608
548
|
let handler = handlers[index];
|
|
609
549
|
let flag = true;
|
|
610
|
-
if (
|
|
611
|
-
flag &&
|
|
612
|
-
listenerCallBack &&
|
|
613
|
-
handler.originCallBack !== listenerCallBack
|
|
614
|
-
) {
|
|
550
|
+
if (flag && listenerCallBack && handler.originCallBack !== listenerCallBack) {
|
|
615
551
|
// callback不同
|
|
616
552
|
flag = false;
|
|
617
553
|
}
|
|
618
554
|
if (flag && selectorList.length && Array.isArray(handler.selector)) {
|
|
619
|
-
if (
|
|
620
|
-
JSON.stringify(handler.selector) !== JSON.stringify(selectorList)
|
|
621
|
-
) {
|
|
555
|
+
if (JSON.stringify(handler.selector) !== JSON.stringify(selectorList)) {
|
|
622
556
|
// 子元素选择器不同
|
|
623
557
|
flag = false;
|
|
624
558
|
}
|
|
@@ -628,11 +562,7 @@ export class DOMUtilsEvent {
|
|
|
628
562
|
flag = false;
|
|
629
563
|
}
|
|
630
564
|
if (flag || isRemoveAll) {
|
|
631
|
-
elementItem.removeEventListener(
|
|
632
|
-
eventName,
|
|
633
|
-
handler.callback,
|
|
634
|
-
handler.option
|
|
635
|
-
);
|
|
565
|
+
elementItem.removeEventListener(eventName, handler.callback, handler.option);
|
|
636
566
|
handlers.splice(index--, 1);
|
|
637
567
|
}
|
|
638
568
|
}
|
|
@@ -655,19 +585,13 @@ export class DOMUtilsEvent {
|
|
|
655
585
|
* @param element 需要取消绑定的元素|元素数组
|
|
656
586
|
* @param eventType (可选)需要取消监听的事件
|
|
657
587
|
*/
|
|
658
|
-
offAll(
|
|
659
|
-
element: DOMUtilsElementEventType,
|
|
660
|
-
eventType?: DOMUtils_EventType | DOMUtils_EventType[]
|
|
661
|
-
): void;
|
|
588
|
+
offAll(element: DOMUtilsElementEventType, eventType?: DOMUtils_EventType | DOMUtils_EventType[]): void;
|
|
662
589
|
/**
|
|
663
590
|
* 取消绑定所有的事件
|
|
664
591
|
* @param element 需要取消绑定的元素|元素数组
|
|
665
592
|
* @param eventType (可选)需要取消监听的事件
|
|
666
593
|
*/
|
|
667
|
-
offAll(
|
|
668
|
-
element: DOMUtilsElementEventType,
|
|
669
|
-
eventType?: DOMUtils_EventType | DOMUtils_EventType[] | string
|
|
670
|
-
) {
|
|
594
|
+
offAll(element: DOMUtilsElementEventType, eventType?: DOMUtils_EventType | DOMUtils_EventType[] | string) {
|
|
671
595
|
let DOMUtilsContext = this;
|
|
672
596
|
if (typeof element === "string") {
|
|
673
597
|
element = DOMUtilsContext.selectorAll(element);
|
|
@@ -694,12 +618,9 @@ export class DOMUtilsEvent {
|
|
|
694
618
|
return;
|
|
695
619
|
}
|
|
696
620
|
let elementEvents = (elementItem as any)[symbolEvents] || {};
|
|
697
|
-
let iterEventNameList = eventTypeList.length
|
|
698
|
-
? eventTypeList
|
|
699
|
-
: Object.keys(elementEvents);
|
|
621
|
+
let iterEventNameList = eventTypeList.length ? eventTypeList : Object.keys(elementEvents);
|
|
700
622
|
iterEventNameList.forEach((eventName) => {
|
|
701
|
-
let handlers: DOMUtilsEventListenerOptionsAttribute[] =
|
|
702
|
-
elementEvents[eventName];
|
|
623
|
+
let handlers: DOMUtilsEventListenerOptionsAttribute[] = elementEvents[eventName];
|
|
703
624
|
if (!handlers) {
|
|
704
625
|
return;
|
|
705
626
|
}
|
|
@@ -736,8 +657,7 @@ export class DOMUtilsEvent {
|
|
|
736
657
|
if (
|
|
737
658
|
DOMUtilsContext.windowApi.document.readyState === "complete" ||
|
|
738
659
|
(DOMUtilsContext.windowApi.document.readyState !== "loading" &&
|
|
739
|
-
!(DOMUtilsContext.windowApi.document.documentElement as any)
|
|
740
|
-
.doScroll)
|
|
660
|
+
!(DOMUtilsContext.windowApi.document.documentElement as any).doScroll)
|
|
741
661
|
) {
|
|
742
662
|
return true;
|
|
743
663
|
} else {
|
|
@@ -808,12 +728,7 @@ export class DOMUtilsEvent {
|
|
|
808
728
|
* DOMUtils.trigger("a.xx",["click","tap","hover"])
|
|
809
729
|
*/
|
|
810
730
|
trigger(
|
|
811
|
-
element:
|
|
812
|
-
| DOMUtilsTargetElementType
|
|
813
|
-
| any[]
|
|
814
|
-
| typeof globalThis
|
|
815
|
-
| Window
|
|
816
|
-
| Document,
|
|
731
|
+
element: DOMUtilsTargetElementType | any[] | typeof globalThis | Window | Document,
|
|
817
732
|
eventType: string,
|
|
818
733
|
details?: object,
|
|
819
734
|
useDispatchToTriggerEvent?: boolean
|
|
@@ -935,22 +850,12 @@ export class DOMUtilsEvent {
|
|
|
935
850
|
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
936
851
|
// 设置
|
|
937
852
|
element.forEach(($ele) => {
|
|
938
|
-
DOMUtilsContext.click(
|
|
939
|
-
$ele as HTMLElement,
|
|
940
|
-
handler,
|
|
941
|
-
details,
|
|
942
|
-
useDispatchToTriggerEvent
|
|
943
|
-
);
|
|
853
|
+
DOMUtilsContext.click($ele as HTMLElement, handler, details, useDispatchToTriggerEvent);
|
|
944
854
|
});
|
|
945
855
|
return;
|
|
946
856
|
}
|
|
947
857
|
if (handler == null) {
|
|
948
|
-
DOMUtilsContext.trigger(
|
|
949
|
-
element,
|
|
950
|
-
"click",
|
|
951
|
-
details,
|
|
952
|
-
useDispatchToTriggerEvent
|
|
953
|
-
);
|
|
858
|
+
DOMUtilsContext.trigger(element, "click", details, useDispatchToTriggerEvent);
|
|
954
859
|
} else {
|
|
955
860
|
DOMUtilsContext.on(element, "click", null, handler);
|
|
956
861
|
}
|
|
@@ -977,7 +882,7 @@ export class DOMUtilsEvent {
|
|
|
977
882
|
) {
|
|
978
883
|
let DOMUtilsContext = this;
|
|
979
884
|
if (typeof element === "string") {
|
|
980
|
-
element = DOMUtilsContext.selectorAll(element);
|
|
885
|
+
element = DOMUtilsContext.selectorAll<HTMLElement>(element);
|
|
981
886
|
}
|
|
982
887
|
if (element == null) {
|
|
983
888
|
return;
|
|
@@ -985,29 +890,14 @@ export class DOMUtilsEvent {
|
|
|
985
890
|
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
986
891
|
// 设置
|
|
987
892
|
element.forEach(($ele) => {
|
|
988
|
-
DOMUtilsContext.focus(
|
|
989
|
-
$ele as HTMLElement,
|
|
990
|
-
handler,
|
|
991
|
-
details,
|
|
992
|
-
useDispatchToTriggerEvent
|
|
993
|
-
);
|
|
893
|
+
DOMUtilsContext.focus($ele as HTMLElement, handler, details, useDispatchToTriggerEvent);
|
|
994
894
|
});
|
|
995
895
|
return;
|
|
996
896
|
}
|
|
997
897
|
if (handler === null) {
|
|
998
|
-
DOMUtilsContext.trigger(
|
|
999
|
-
element,
|
|
1000
|
-
"blur",
|
|
1001
|
-
details,
|
|
1002
|
-
useDispatchToTriggerEvent
|
|
1003
|
-
);
|
|
898
|
+
DOMUtilsContext.trigger(element, "blur", details, useDispatchToTriggerEvent);
|
|
1004
899
|
} else {
|
|
1005
|
-
DOMUtilsContext.on(
|
|
1006
|
-
element,
|
|
1007
|
-
"blur",
|
|
1008
|
-
null,
|
|
1009
|
-
handler as (event: Event) => void
|
|
1010
|
-
);
|
|
900
|
+
DOMUtilsContext.on(element, "blur", null, handler as (event: Event) => void);
|
|
1011
901
|
}
|
|
1012
902
|
}
|
|
1013
903
|
/**
|
|
@@ -1032,7 +922,7 @@ export class DOMUtilsEvent {
|
|
|
1032
922
|
) {
|
|
1033
923
|
let DOMUtilsContext = this;
|
|
1034
924
|
if (typeof element === "string") {
|
|
1035
|
-
element = DOMUtilsContext.selectorAll(element);
|
|
925
|
+
element = DOMUtilsContext.selectorAll<HTMLElement>(element);
|
|
1036
926
|
}
|
|
1037
927
|
if (element == null) {
|
|
1038
928
|
return;
|
|
@@ -1040,22 +930,12 @@ export class DOMUtilsEvent {
|
|
|
1040
930
|
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1041
931
|
// 设置
|
|
1042
932
|
element.forEach(($ele) => {
|
|
1043
|
-
DOMUtilsContext.focus(
|
|
1044
|
-
$ele as HTMLElement,
|
|
1045
|
-
handler,
|
|
1046
|
-
details,
|
|
1047
|
-
useDispatchToTriggerEvent
|
|
1048
|
-
);
|
|
933
|
+
DOMUtilsContext.focus($ele as HTMLElement, handler, details, useDispatchToTriggerEvent);
|
|
1049
934
|
});
|
|
1050
935
|
return;
|
|
1051
936
|
}
|
|
1052
937
|
if (handler == null) {
|
|
1053
|
-
DOMUtilsContext.trigger(
|
|
1054
|
-
element,
|
|
1055
|
-
"focus",
|
|
1056
|
-
details,
|
|
1057
|
-
useDispatchToTriggerEvent
|
|
1058
|
-
);
|
|
938
|
+
DOMUtilsContext.trigger(element, "focus", details, useDispatchToTriggerEvent);
|
|
1059
939
|
} else {
|
|
1060
940
|
DOMUtilsContext.on(element, "focus", null, handler);
|
|
1061
941
|
}
|
|
@@ -1081,7 +961,7 @@ export class DOMUtilsEvent {
|
|
|
1081
961
|
) {
|
|
1082
962
|
let DOMUtilsContext = this;
|
|
1083
963
|
if (typeof element === "string") {
|
|
1084
|
-
element = DOMUtilsContext.selectorAll(element);
|
|
964
|
+
element = DOMUtilsContext.selectorAll<HTMLElement>(element);
|
|
1085
965
|
}
|
|
1086
966
|
if (element == null) {
|
|
1087
967
|
return;
|
|
@@ -1096,6 +976,84 @@ export class DOMUtilsEvent {
|
|
|
1096
976
|
DOMUtilsContext.on(element, "mouseenter", null, handler, option);
|
|
1097
977
|
DOMUtilsContext.on(element, "mouseleave", null, handler, option);
|
|
1098
978
|
}
|
|
979
|
+
/**
|
|
980
|
+
* 当动画结束时触发事件
|
|
981
|
+
* @param element 监听的元素
|
|
982
|
+
* @param handler 触发的回调函数
|
|
983
|
+
* @param option 配置项,这里默认配置once为true
|
|
984
|
+
*/
|
|
985
|
+
animationend(
|
|
986
|
+
element: HTMLElement | string,
|
|
987
|
+
handler: (this: HTMLElement, event: DOMUtils_Event["animationend"]) => void,
|
|
988
|
+
option?: boolean | DOMUtilsEventListenerOption
|
|
989
|
+
) {
|
|
990
|
+
let DOMUtilsContext = this;
|
|
991
|
+
if (typeof element === "string") {
|
|
992
|
+
element = DOMUtilsContext.selector<HTMLElement>(element)!;
|
|
993
|
+
}
|
|
994
|
+
if (element == null) {
|
|
995
|
+
return;
|
|
996
|
+
}
|
|
997
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
998
|
+
// 设置
|
|
999
|
+
element.forEach(($ele) => {
|
|
1000
|
+
DOMUtilsContext.animationend($ele as HTMLElement, handler, option);
|
|
1001
|
+
});
|
|
1002
|
+
return;
|
|
1003
|
+
}
|
|
1004
|
+
const defaultOption: DOMUtilsEventListenerOption = {
|
|
1005
|
+
once: true,
|
|
1006
|
+
};
|
|
1007
|
+
Object.assign(defaultOption, option || {});
|
|
1008
|
+
const eventNameList = DOMUtilsCommonUtils.getAnimationEndNameList();
|
|
1009
|
+
DOMUtilsContext.on(element, eventNameList, null, handler, defaultOption);
|
|
1010
|
+
if (!defaultOption.once) {
|
|
1011
|
+
return {
|
|
1012
|
+
off() {
|
|
1013
|
+
DOMUtilsContext.off(element, eventNameList, null, handler, defaultOption);
|
|
1014
|
+
},
|
|
1015
|
+
};
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
/**
|
|
1019
|
+
* 当过渡结束时触发事件
|
|
1020
|
+
* @param element 监听的元素
|
|
1021
|
+
* @param handler 触发的回调函数
|
|
1022
|
+
* @param option 配置项,这里默认配置once为true
|
|
1023
|
+
*/
|
|
1024
|
+
transitionend(
|
|
1025
|
+
element: HTMLElement | string,
|
|
1026
|
+
handler: (this: HTMLElement, event: DOMUtils_Event["transitionend"]) => void,
|
|
1027
|
+
option?: boolean | DOMUtilsEventListenerOption
|
|
1028
|
+
) {
|
|
1029
|
+
let DOMUtilsContext = this;
|
|
1030
|
+
if (typeof element === "string") {
|
|
1031
|
+
element = DOMUtilsContext.selector<HTMLElement>(element)!;
|
|
1032
|
+
}
|
|
1033
|
+
if (element == null) {
|
|
1034
|
+
return;
|
|
1035
|
+
}
|
|
1036
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1037
|
+
// 设置
|
|
1038
|
+
element.forEach(($ele) => {
|
|
1039
|
+
DOMUtilsContext.transitionend($ele as HTMLElement, handler, option);
|
|
1040
|
+
});
|
|
1041
|
+
return;
|
|
1042
|
+
}
|
|
1043
|
+
const defaultOption: DOMUtilsEventListenerOption = {
|
|
1044
|
+
once: true,
|
|
1045
|
+
};
|
|
1046
|
+
Object.assign(defaultOption, option || {});
|
|
1047
|
+
const eventNameList = DOMUtilsCommonUtils.getTransitionEndNameList();
|
|
1048
|
+
DOMUtilsContext.on(element, eventNameList, null, handler, defaultOption);
|
|
1049
|
+
if (!defaultOption.once) {
|
|
1050
|
+
return {
|
|
1051
|
+
off() {
|
|
1052
|
+
DOMUtilsContext.off(element, eventNameList, null, handler, defaultOption);
|
|
1053
|
+
},
|
|
1054
|
+
};
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1099
1057
|
/**
|
|
1100
1058
|
* 当按键松开时触发事件
|
|
1101
1059
|
* keydown - > keypress - > keyup
|
|
@@ -1204,7 +1162,6 @@ export class DOMUtilsEvent {
|
|
|
1204
1162
|
}
|
|
1205
1163
|
DOMUtilsContext.on(element, "keypress", null, handler, option);
|
|
1206
1164
|
}
|
|
1207
|
-
|
|
1208
1165
|
/**
|
|
1209
1166
|
* 监听某个元素键盘按键事件或window全局按键事件
|
|
1210
1167
|
* 按下有值的键时触发,按下Ctrl\Alt\Shift\Meta是无值键。按下先触发keydown事件,再触发keypress事件。
|
|
@@ -1271,12 +1228,7 @@ export class DOMUtilsEvent {
|
|
|
1271
1228
|
listenKeyboard(
|
|
1272
1229
|
element: DOMUtilsTargetElementType | Window | Node | typeof globalThis,
|
|
1273
1230
|
eventName: "keyup" | "keypress" | "keydown" = "keypress",
|
|
1274
|
-
callback: (
|
|
1275
|
-
keyName: string,
|
|
1276
|
-
keyValue: number,
|
|
1277
|
-
otherCodeList: string[],
|
|
1278
|
-
event: KeyboardEvent
|
|
1279
|
-
) => void,
|
|
1231
|
+
callback: (keyName: string, keyValue: number, otherCodeList: string[], event: KeyboardEvent) => void,
|
|
1280
1232
|
options?: DOMUtilsEventListenerOption | boolean
|
|
1281
1233
|
): {
|
|
1282
1234
|
removeListen(): void;
|
|
@@ -1446,10 +1398,7 @@ export class DOMUtilsEvent {
|
|
|
1446
1398
|
* DOMUtils.matches("div:regexp(/^xxx/ig)")
|
|
1447
1399
|
* > false
|
|
1448
1400
|
*/
|
|
1449
|
-
matches(
|
|
1450
|
-
$el: HTMLElement | Element | null | undefined,
|
|
1451
|
-
selector: string
|
|
1452
|
-
): boolean {
|
|
1401
|
+
matches($el: HTMLElement | Element | null | undefined, selector: string): boolean {
|
|
1453
1402
|
selector = selector.trim();
|
|
1454
1403
|
if ($el == null) {
|
|
1455
1404
|
return false;
|
|
@@ -1524,14 +1473,8 @@ export class DOMUtilsEvent {
|
|
|
1524
1473
|
$el: HTMLElement | Element,
|
|
1525
1474
|
selector: string
|
|
1526
1475
|
): HTMLElementTagNameMap[K] | null;
|
|
1527
|
-
closest<E extends Element = Element>(
|
|
1528
|
-
|
|
1529
|
-
selector: string
|
|
1530
|
-
): E | null;
|
|
1531
|
-
closest<E extends Element = Element>(
|
|
1532
|
-
$el: HTMLElement | Element,
|
|
1533
|
-
selector: string
|
|
1534
|
-
): E | null {
|
|
1476
|
+
closest<E extends Element = Element>($el: HTMLElement | Element, selector: string): E | null;
|
|
1477
|
+
closest<E extends Element = Element>($el: HTMLElement | Element, selector: string): E | null {
|
|
1535
1478
|
selector = selector.trim();
|
|
1536
1479
|
|
|
1537
1480
|
if (selector.match(/[^\s]{1}:empty$/gi)) {
|