@whitesev/domutils 1.7.5 → 1.8.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/README.md +4 -4
- package/dist/index.amd.js +219 -112
- 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 +219 -112
- 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 +219 -112
- 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 +219 -112
- 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 +219 -112
- 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 +219 -112
- 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/ElementEvent.d.ts +123 -105
- package/dist/types/src/types/DOMUtilsEvent.d.ts +2 -2
- package/package.json +9 -9
- package/src/ElementEvent.ts +270 -135
- package/src/types/DOMUtilsEvent.d.ts +2 -2
package/src/ElementEvent.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CommonUtils } from "./CommonUtils";
|
|
2
|
-
import { GlobalData } from "./GlobalData";
|
|
3
2
|
import { ElementAnimate } from "./ElementAnimate";
|
|
3
|
+
import { GlobalData } from "./GlobalData";
|
|
4
4
|
import { OriginPrototype } from "./OriginPrototype";
|
|
5
5
|
import type {
|
|
6
6
|
DOMUtils_Event,
|
|
@@ -32,7 +32,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
32
32
|
* 绑定事件
|
|
33
33
|
* @param element 需要绑定的元素|元素数组|window
|
|
34
34
|
* @param eventType 需要监听的事件
|
|
35
|
-
* @param
|
|
35
|
+
* @param handler 绑定事件触发的回调函数
|
|
36
36
|
* @param option
|
|
37
37
|
* + capture 表示事件是否在捕获阶段触发。默认为false,即在冒泡阶段触发
|
|
38
38
|
* + once 表示事件是否只触发一次。默认为false
|
|
@@ -49,14 +49,14 @@ class ElementEvent extends ElementAnimate {
|
|
|
49
49
|
on<T extends DOMUtils_EventType>(
|
|
50
50
|
element: DOMUtilsElementEventType,
|
|
51
51
|
eventType: T | T[],
|
|
52
|
-
|
|
52
|
+
handler: (this: HTMLElement, event: DOMUtils_Event[T]) => void,
|
|
53
53
|
option?: DOMUtilsEventListenerOption | boolean
|
|
54
54
|
): DOMUtilsAddEventListenerResult;
|
|
55
55
|
/**
|
|
56
56
|
* 绑定事件
|
|
57
57
|
* @param element 需要绑定的元素|元素数组|window
|
|
58
58
|
* @param eventType 需要监听的事件
|
|
59
|
-
* @param
|
|
59
|
+
* @param handler 绑定事件触发的回调函数
|
|
60
60
|
* @param option
|
|
61
61
|
* + capture 表示事件是否在捕获阶段触发。默认为false,即在冒泡阶段触发
|
|
62
62
|
* + once 表示事件是否只触发一次。默认为false
|
|
@@ -73,7 +73,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
73
73
|
on<T extends Event>(
|
|
74
74
|
element: DOMUtilsElementEventType,
|
|
75
75
|
eventType: string | string[],
|
|
76
|
-
|
|
76
|
+
handler: (this: HTMLElement, event: T) => void,
|
|
77
77
|
option?: DOMUtilsEventListenerOption | boolean
|
|
78
78
|
): DOMUtilsAddEventListenerResult;
|
|
79
79
|
/**
|
|
@@ -81,7 +81,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
81
81
|
* @param element 需要绑定的元素|元素数组|window
|
|
82
82
|
* @param eventType 需要监听的事件
|
|
83
83
|
* @param selector 子元素选择器
|
|
84
|
-
* @param
|
|
84
|
+
* @param handler 绑定事件触发的回调函数
|
|
85
85
|
* @param option
|
|
86
86
|
* + capture 表示事件是否在捕获阶段触发。默认为false,即在冒泡阶段触发
|
|
87
87
|
* + once 表示事件是否只触发一次。默认为false
|
|
@@ -104,7 +104,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
104
104
|
element: DOMUtilsElementEventType,
|
|
105
105
|
eventType: T | T[],
|
|
106
106
|
selector: string | string[] | undefined | null,
|
|
107
|
-
|
|
107
|
+
handler: (this: HTMLElement, event: DOMUtils_Event[T], selectorTarget: HTMLElement) => void,
|
|
108
108
|
option?: DOMUtilsEventListenerOption | boolean
|
|
109
109
|
): DOMUtilsAddEventListenerResult;
|
|
110
110
|
/**
|
|
@@ -112,7 +112,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
112
112
|
* @param element 需要绑定的元素|元素数组|window
|
|
113
113
|
* @param eventType 需要监听的事件
|
|
114
114
|
* @param selector 子元素选择器
|
|
115
|
-
* @param
|
|
115
|
+
* @param handler 绑定事件触发的回调函数
|
|
116
116
|
* @param option
|
|
117
117
|
* + capture 表示事件是否在捕获阶段触发。默认为false,即在冒泡阶段触发
|
|
118
118
|
* + once 表示事件是否只触发一次。默认为false
|
|
@@ -135,7 +135,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
135
135
|
element: DOMUtilsElementEventType,
|
|
136
136
|
eventType: string | string[],
|
|
137
137
|
selector: string | string[] | undefined | null,
|
|
138
|
-
|
|
138
|
+
handler: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void,
|
|
139
139
|
option?: DOMUtilsEventListenerOption | boolean
|
|
140
140
|
): DOMUtilsAddEventListenerResult;
|
|
141
141
|
on<T extends Event>(
|
|
@@ -193,7 +193,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
193
193
|
if (element == null) {
|
|
194
194
|
return {
|
|
195
195
|
off() {},
|
|
196
|
-
|
|
196
|
+
emit() {},
|
|
197
197
|
};
|
|
198
198
|
}
|
|
199
199
|
let $elList: (Element | Document | Window)[] = [];
|
|
@@ -332,10 +332,10 @@ class ElementEvent extends ElementAnimate {
|
|
|
332
332
|
/**
|
|
333
333
|
* 主动触发事件
|
|
334
334
|
* @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
|
|
335
|
-
* @param
|
|
335
|
+
* @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
|
|
336
336
|
*/
|
|
337
|
-
|
|
338
|
-
that.
|
|
337
|
+
emit: (details?: object, useDispatchToEmit?: boolean) => {
|
|
338
|
+
that.emit($elList, eventTypeList, details, useDispatchToEmit);
|
|
339
339
|
},
|
|
340
340
|
};
|
|
341
341
|
}
|
|
@@ -658,18 +658,18 @@ class ElementEvent extends ElementAnimate {
|
|
|
658
658
|
* 等待文档加载完成后执行指定的函数
|
|
659
659
|
* @param callback 需要执行的函数
|
|
660
660
|
* @example
|
|
661
|
-
* DOMUtils.
|
|
661
|
+
* DOMUtils.onReady(function(){
|
|
662
662
|
* console.log("文档加载完毕")
|
|
663
663
|
* });
|
|
664
664
|
* > "文档加载完毕"
|
|
665
665
|
* @example
|
|
666
|
-
* await DOMUtils.
|
|
666
|
+
* await DOMUtils.onReady();
|
|
667
667
|
* console.log("文档加载完毕");
|
|
668
668
|
* > "文档加载完毕"
|
|
669
669
|
*/
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
670
|
+
onReady(): Promise<void>;
|
|
671
|
+
onReady(callback: (...args: any[]) => any): void;
|
|
672
|
+
onReady(...args: any[]): void | Promise<void> {
|
|
673
673
|
const callback: ((...args: any[]) => any) | undefined = args[0];
|
|
674
674
|
// 异步回调
|
|
675
675
|
let resolve: ((...args: any[]) => any) | undefined = void 0;
|
|
@@ -762,60 +762,60 @@ class ElementEvent extends ElementAnimate {
|
|
|
762
762
|
* @param element 需要触发的元素|元素数组|window
|
|
763
763
|
* @param eventType 需要触发的事件
|
|
764
764
|
* @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
|
|
765
|
-
* @param
|
|
765
|
+
* @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
|
|
766
766
|
* @example
|
|
767
767
|
* // 触发元素a.xx的click事件
|
|
768
|
-
* DOMUtils.
|
|
769
|
-
* DOMUtils.
|
|
768
|
+
* DOMUtils.emit(document.querySelector("a.xx"),"click")
|
|
769
|
+
* DOMUtils.emit("a.xx","click")
|
|
770
770
|
* // 触发元素a.xx的click、tap、hover事件
|
|
771
|
-
* DOMUtils.
|
|
772
|
-
* DOMUtils.
|
|
771
|
+
* DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
|
|
772
|
+
* DOMUtils.emit("a.xx",["click","tap","hover"])
|
|
773
773
|
*/
|
|
774
|
-
|
|
774
|
+
emit(
|
|
775
775
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | any[] | typeof globalThis | Window | Document,
|
|
776
776
|
eventType: string | string[],
|
|
777
777
|
details?: object,
|
|
778
|
-
|
|
778
|
+
useDispatchToEmit?: boolean
|
|
779
779
|
): void;
|
|
780
780
|
/**
|
|
781
781
|
* 主动触发事件
|
|
782
782
|
* @param element 需要触发的元素|元素数组|window
|
|
783
783
|
* @param eventType 需要触发的事件
|
|
784
784
|
* @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
|
|
785
|
-
* @param
|
|
785
|
+
* @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
|
|
786
786
|
* @example
|
|
787
787
|
* // 触发元素a.xx的click事件
|
|
788
|
-
* DOMUtils.
|
|
789
|
-
* DOMUtils.
|
|
788
|
+
* DOMUtils.emit(document.querySelector("a.xx"),"click")
|
|
789
|
+
* DOMUtils.emit("a.xx","click")
|
|
790
790
|
* // 触发元素a.xx的click、tap、hover事件
|
|
791
|
-
* DOMUtils.
|
|
792
|
-
* DOMUtils.
|
|
791
|
+
* DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
|
|
792
|
+
* DOMUtils.emit("a.xx",["click","tap","hover"])
|
|
793
793
|
*/
|
|
794
|
-
|
|
794
|
+
emit(
|
|
795
795
|
element: Element | string | NodeList | any[] | Window | Document,
|
|
796
796
|
eventType: DOMUtils_EventType | DOMUtils_EventType[],
|
|
797
797
|
details?: object,
|
|
798
|
-
|
|
798
|
+
useDispatchToEmit?: boolean
|
|
799
799
|
): void;
|
|
800
800
|
/**
|
|
801
801
|
* 主动触发事件
|
|
802
802
|
* @param element 需要触发的元素|元素数组|window
|
|
803
803
|
* @param eventType 需要触发的事件
|
|
804
804
|
* @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
|
|
805
|
-
* @param
|
|
805
|
+
* @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
|
|
806
806
|
* @example
|
|
807
807
|
* // 触发元素a.xx的click事件
|
|
808
|
-
* DOMUtils.
|
|
809
|
-
* DOMUtils.
|
|
808
|
+
* DOMUtils.emit(document.querySelector("a.xx"),"click")
|
|
809
|
+
* DOMUtils.emit("a.xx","click")
|
|
810
810
|
* // 触发元素a.xx的click、tap、hover事件
|
|
811
|
-
* DOMUtils.
|
|
812
|
-
* DOMUtils.
|
|
811
|
+
* DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
|
|
812
|
+
* DOMUtils.emit("a.xx",["click","tap","hover"])
|
|
813
813
|
*/
|
|
814
|
-
|
|
814
|
+
emit(
|
|
815
815
|
element: Element | string | NodeList | any[] | Window | Document,
|
|
816
816
|
eventType: DOMUtils_EventType | DOMUtils_EventType[] | string | string[],
|
|
817
817
|
details?: object,
|
|
818
|
-
|
|
818
|
+
useDispatchToEmit: boolean = true
|
|
819
819
|
) {
|
|
820
820
|
const that = this;
|
|
821
821
|
if (typeof element === "string") {
|
|
@@ -858,7 +858,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
858
858
|
});
|
|
859
859
|
}
|
|
860
860
|
}
|
|
861
|
-
if (
|
|
861
|
+
if (useDispatchToEmit == false && eventTypeItem in elementEvents) {
|
|
862
862
|
// 直接调用监听的事件
|
|
863
863
|
elementEvents[eventTypeItem].forEach((eventsItem: any) => {
|
|
864
864
|
eventsItem.callback(event);
|
|
@@ -871,11 +871,11 @@ class ElementEvent extends ElementAnimate {
|
|
|
871
871
|
}
|
|
872
872
|
|
|
873
873
|
/**
|
|
874
|
-
*
|
|
874
|
+
* 监听或触发元素的click事件
|
|
875
875
|
* @param element 目标元素
|
|
876
876
|
* @param handler (可选)事件处理函数
|
|
877
877
|
* @param details (可选)赋予触发的Event的额外属性
|
|
878
|
-
* @param
|
|
878
|
+
* @param useDispatchToEmit (可选)是否使用dispatchEvent来触发事件,默认true
|
|
879
879
|
* @example
|
|
880
880
|
* // 触发元素a.xx的click事件
|
|
881
881
|
* DOMUtils.click(document.querySelector("a.xx"))
|
|
@@ -888,7 +888,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
888
888
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | typeof globalThis | Window,
|
|
889
889
|
handler?: (this: HTMLElement, event: DOMUtils_Event["click"]) => void,
|
|
890
890
|
details?: any,
|
|
891
|
-
|
|
891
|
+
useDispatchToEmit?: boolean
|
|
892
892
|
) {
|
|
893
893
|
const that = this;
|
|
894
894
|
if (typeof element === "string") {
|
|
@@ -900,22 +900,22 @@ class ElementEvent extends ElementAnimate {
|
|
|
900
900
|
if (CommonUtils.isNodeList(element)) {
|
|
901
901
|
// 设置
|
|
902
902
|
element.forEach(($ele) => {
|
|
903
|
-
that.click($ele as HTMLElement, handler, details,
|
|
903
|
+
that.click($ele as HTMLElement, handler, details, useDispatchToEmit);
|
|
904
904
|
});
|
|
905
905
|
return;
|
|
906
906
|
}
|
|
907
907
|
if (handler == null) {
|
|
908
|
-
that.
|
|
908
|
+
that.emit(element, "click", details, useDispatchToEmit);
|
|
909
909
|
} else {
|
|
910
910
|
that.on(element, "click", null, handler);
|
|
911
911
|
}
|
|
912
912
|
}
|
|
913
913
|
/**
|
|
914
|
-
*
|
|
914
|
+
* 监听或触发元素的blur事件
|
|
915
915
|
* @param element 目标元素
|
|
916
916
|
* @param handler (可选)事件处理函数
|
|
917
917
|
* @param details (可选)赋予触发的Event的额外属性
|
|
918
|
-
* @param
|
|
918
|
+
* @param useDispatchToEmit (可选)是否使用dispatchEvent来触发事件,默认true
|
|
919
919
|
* @example
|
|
920
920
|
* // 触发元素a.xx的blur事件
|
|
921
921
|
* DOMUtils.blur(document.querySelector("a.xx"))
|
|
@@ -928,7 +928,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
928
928
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | typeof globalThis | Window,
|
|
929
929
|
handler?: (this: HTMLElement, event: DOMUtils_Event["blur"]) => void,
|
|
930
930
|
details?: object,
|
|
931
|
-
|
|
931
|
+
useDispatchToEmit?: boolean
|
|
932
932
|
) {
|
|
933
933
|
const that = this;
|
|
934
934
|
if (typeof element === "string") {
|
|
@@ -940,22 +940,22 @@ class ElementEvent extends ElementAnimate {
|
|
|
940
940
|
if (CommonUtils.isNodeList(element)) {
|
|
941
941
|
// 设置
|
|
942
942
|
element.forEach(($ele) => {
|
|
943
|
-
that.focus($ele as HTMLElement, handler, details,
|
|
943
|
+
that.focus($ele as HTMLElement, handler, details, useDispatchToEmit);
|
|
944
944
|
});
|
|
945
945
|
return;
|
|
946
946
|
}
|
|
947
947
|
if (handler === null) {
|
|
948
|
-
that.
|
|
948
|
+
that.emit(element, "blur", details, useDispatchToEmit);
|
|
949
949
|
} else {
|
|
950
950
|
that.on(element, "blur", null, handler as (event: Event) => void);
|
|
951
951
|
}
|
|
952
952
|
}
|
|
953
953
|
/**
|
|
954
|
-
*
|
|
954
|
+
* 监听或触发元素的focus事件
|
|
955
955
|
* @param element 目标元素
|
|
956
956
|
* @param handler (可选)事件处理函数
|
|
957
957
|
* @param details (可选)赋予触发的Event的额外属性
|
|
958
|
-
* @param
|
|
958
|
+
* @param useDispatchToEmit (可选)是否使用dispatchEvent来触发事件,默认true
|
|
959
959
|
* @example
|
|
960
960
|
* // 触发元素a.xx的focus事件
|
|
961
961
|
* DOMUtils.focus(document.querySelector("a.xx"))
|
|
@@ -968,7 +968,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
968
968
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | typeof globalThis | Window,
|
|
969
969
|
handler?: (this: HTMLElement, event: DOMUtils_Event["focus"]) => void,
|
|
970
970
|
details?: object,
|
|
971
|
-
|
|
971
|
+
useDispatchToEmit?: boolean
|
|
972
972
|
) {
|
|
973
973
|
const that = this;
|
|
974
974
|
if (typeof element === "string") {
|
|
@@ -980,12 +980,12 @@ class ElementEvent extends ElementAnimate {
|
|
|
980
980
|
if (CommonUtils.isNodeList(element)) {
|
|
981
981
|
// 设置
|
|
982
982
|
element.forEach(($ele) => {
|
|
983
|
-
that.focus($ele as HTMLElement, handler, details,
|
|
983
|
+
that.focus($ele as HTMLElement, handler, details, useDispatchToEmit);
|
|
984
984
|
});
|
|
985
985
|
return;
|
|
986
986
|
}
|
|
987
987
|
if (handler == null) {
|
|
988
|
-
that.
|
|
988
|
+
that.emit(element, "focus", details, useDispatchToEmit);
|
|
989
989
|
} else {
|
|
990
990
|
that.on(element, "focus", null, handler);
|
|
991
991
|
}
|
|
@@ -997,14 +997,14 @@ class ElementEvent extends ElementAnimate {
|
|
|
997
997
|
* @param option 配置
|
|
998
998
|
* @example
|
|
999
999
|
* // 监听a.xx元素的移入或移出
|
|
1000
|
-
* DOMUtils.
|
|
1000
|
+
* DOMUtils.onHover(document.querySelector("a.xx"),()=>{
|
|
1001
1001
|
* console.log("移入/移除");
|
|
1002
1002
|
* })
|
|
1003
|
-
* DOMUtils.
|
|
1003
|
+
* DOMUtils.onHover("a.xx",()=>{
|
|
1004
1004
|
* console.log("移入/移除");
|
|
1005
1005
|
* })
|
|
1006
1006
|
*/
|
|
1007
|
-
|
|
1007
|
+
onHover(
|
|
1008
1008
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | Node,
|
|
1009
1009
|
handler: (this: HTMLElement, event: DOMUtils_Event["hover"]) => void,
|
|
1010
1010
|
option?: boolean | DOMUtilsEventListenerOption
|
|
@@ -1019,7 +1019,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
1019
1019
|
if (CommonUtils.isNodeList(element)) {
|
|
1020
1020
|
// 设置
|
|
1021
1021
|
element.forEach(($ele) => {
|
|
1022
|
-
that.
|
|
1022
|
+
that.onHover($ele as HTMLElement, handler, option);
|
|
1023
1023
|
});
|
|
1024
1024
|
return;
|
|
1025
1025
|
}
|
|
@@ -1027,12 +1027,12 @@ class ElementEvent extends ElementAnimate {
|
|
|
1027
1027
|
that.on(element, "mouseleave", null, handler, option);
|
|
1028
1028
|
}
|
|
1029
1029
|
/**
|
|
1030
|
-
*
|
|
1030
|
+
* 监听动画结束
|
|
1031
1031
|
* @param element 监听的元素
|
|
1032
1032
|
* @param handler 触发的回调函数
|
|
1033
1033
|
* @param option 配置项,这里默认配置once为true
|
|
1034
1034
|
*/
|
|
1035
|
-
|
|
1035
|
+
onAnimationend(
|
|
1036
1036
|
element: HTMLElement | string | Element | DocumentFragment,
|
|
1037
1037
|
handler: (this: HTMLElement, event: DOMUtils_Event["animationend"]) => void,
|
|
1038
1038
|
option?: boolean | DOMUtilsEventListenerOption
|
|
@@ -1059,12 +1059,12 @@ class ElementEvent extends ElementAnimate {
|
|
|
1059
1059
|
}
|
|
1060
1060
|
}
|
|
1061
1061
|
/**
|
|
1062
|
-
*
|
|
1062
|
+
* 监听过渡结束
|
|
1063
1063
|
* @param element 监听的元素
|
|
1064
1064
|
* @param handler 触发的回调函数
|
|
1065
1065
|
* @param option 配置项,这里默认配置once为true
|
|
1066
1066
|
*/
|
|
1067
|
-
|
|
1067
|
+
onTransitionend(
|
|
1068
1068
|
element: HTMLElement | string | Element | DocumentFragment,
|
|
1069
1069
|
handler: (this: HTMLElement, event: DOMUtils_Event["transitionend"]) => void,
|
|
1070
1070
|
option?: boolean | DOMUtilsEventListenerOption
|
|
@@ -1105,7 +1105,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
1105
1105
|
* console.log("按键松开");
|
|
1106
1106
|
* })
|
|
1107
1107
|
*/
|
|
1108
|
-
|
|
1108
|
+
onKeyup(
|
|
1109
1109
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | Window | Node | typeof globalThis,
|
|
1110
1110
|
handler: (this: HTMLElement, event: DOMUtils_Event["keyup"]) => void,
|
|
1111
1111
|
option?: boolean | DOMUtilsEventListenerOption
|
|
@@ -1120,7 +1120,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
1120
1120
|
if (CommonUtils.isNodeList(element)) {
|
|
1121
1121
|
// 设置
|
|
1122
1122
|
element.forEach(($ele) => {
|
|
1123
|
-
that.
|
|
1123
|
+
that.onKeyup($ele as HTMLElement, handler, option);
|
|
1124
1124
|
});
|
|
1125
1125
|
return;
|
|
1126
1126
|
}
|
|
@@ -1141,7 +1141,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
1141
1141
|
* console.log("按键按下");
|
|
1142
1142
|
* })
|
|
1143
1143
|
*/
|
|
1144
|
-
|
|
1144
|
+
onKeydown(
|
|
1145
1145
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | Window | Node | typeof globalThis,
|
|
1146
1146
|
handler: (this: HTMLElement, event: DOMUtils_Event["keydown"]) => void,
|
|
1147
1147
|
option?: boolean | DOMUtilsEventListenerOption
|
|
@@ -1156,7 +1156,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
1156
1156
|
if (CommonUtils.isNodeList(element)) {
|
|
1157
1157
|
// 设置
|
|
1158
1158
|
element.forEach(($ele) => {
|
|
1159
|
-
that.
|
|
1159
|
+
that.onKeydown($ele as HTMLElement, handler, option);
|
|
1160
1160
|
});
|
|
1161
1161
|
return;
|
|
1162
1162
|
}
|
|
@@ -1177,7 +1177,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
1177
1177
|
* console.log("按键按下");
|
|
1178
1178
|
* })
|
|
1179
1179
|
*/
|
|
1180
|
-
|
|
1180
|
+
onKeypress(
|
|
1181
1181
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | Window | Node | typeof globalThis,
|
|
1182
1182
|
handler: (this: HTMLElement, event: DOMUtils_Event["keypress"]) => void,
|
|
1183
1183
|
option?: boolean | DOMUtilsEventListenerOption
|
|
@@ -1192,79 +1192,79 @@ class ElementEvent extends ElementAnimate {
|
|
|
1192
1192
|
if (CommonUtils.isNodeList(element)) {
|
|
1193
1193
|
// 设置
|
|
1194
1194
|
element.forEach(($ele) => {
|
|
1195
|
-
that.
|
|
1195
|
+
that.onKeypress($ele as HTMLElement, handler, option);
|
|
1196
1196
|
});
|
|
1197
1197
|
return;
|
|
1198
1198
|
}
|
|
1199
1199
|
that.on(element, "keypress", null, handler, option);
|
|
1200
1200
|
}
|
|
1201
1201
|
/**
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1202
|
+
* 监听某个元素键盘按键事件或window全局按键事件
|
|
1203
|
+
* 按下有值的键时触发,按下Ctrl\Alt\Shift\Meta是无值键。按下先触发keydown事件,再触发keypress事件。
|
|
1204
|
+
* @param element 需要监听的对象,可以是全局Window或者某个元素
|
|
1205
|
+
* @param eventName 事件名,默认keypress,keydown - > keypress - > keyup
|
|
1206
|
+
* @param handler 自己定义的回调事件,参数1为当前的key,参数2为组合按键,数组类型,包含ctrl、shift、alt和meta(win键或mac的cmd键)
|
|
1207
1207
|
* @param options 监听事件的配置
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1208
|
+
* @example
|
|
1209
|
+
Utils.onKeyboard(window,(keyName,keyValue,otherKey,event)=>{
|
|
1210
|
+
if(keyName === "Enter"){
|
|
1211
|
+
console.log("回车按键的值是:"+keyValue)
|
|
1212
|
+
}
|
|
1213
|
+
if(otherKey.indexOf("ctrl") && keyName === "Enter" ){
|
|
1214
|
+
console.log("Ctrl和回车键");
|
|
1215
|
+
}
|
|
1216
|
+
})
|
|
1217
|
+
* @example
|
|
1218
|
+
字母和数字键的键码值(keyCode)
|
|
1219
|
+
按键 键码 按键 键码 按键 键码 按键 键码
|
|
1220
|
+
A 65 J 74 S 83 1 49
|
|
1221
|
+
B 66 K 75 T 84 2 50
|
|
1222
|
+
C 67 L 76 U 85 3 51
|
|
1223
|
+
D 68 M 77 V 86 4 52
|
|
1224
|
+
E 69 N 78 W 87 5 53
|
|
1225
|
+
F 70 O 79 X 88 6 54
|
|
1226
|
+
G 71 P 80 Y 89 7 55
|
|
1227
|
+
H 72 Q 81 Z 90 8 56
|
|
1228
|
+
I 73 R 82 0 48 9 57
|
|
1229
|
+
|
|
1230
|
+
数字键盘上的键的键码值(keyCode)
|
|
1231
|
+
功能键键码值(keyCode)
|
|
1232
|
+
按键 键码 按键 键码 按键 键码 按键 键码
|
|
1233
|
+
0 96 8 104 F1 112 F7 118
|
|
1234
|
+
1 97 9 105 F2 113 F8 119
|
|
1235
|
+
2 98 * 106 F3 114 F9 120
|
|
1236
|
+
3 99 + 107 F4 115 F10 121
|
|
1237
|
+
4 100 Enter 108 F5 116 F11 122
|
|
1238
|
+
5 101 - 109 F6 117 F12 123
|
|
1239
|
+
6 102 . 110
|
|
1240
|
+
7 103 / 111
|
|
1241
|
+
|
|
1242
|
+
控制键键码值(keyCode)
|
|
1243
|
+
按键 键码 按键 键码 按键 键码 按键 键码
|
|
1244
|
+
BackSpace 8 Esc 27 → 39 -_ 189
|
|
1245
|
+
Tab 9 Spacebar 32 ↓ 40 .> 190
|
|
1246
|
+
Clear 12 Page Up 33 Insert 45 /? 191
|
|
1247
|
+
Enter 13 Page Down 34 Delete 46 `~ 192
|
|
1248
|
+
Shift 16 End 35 Num Lock 144 [{ 219
|
|
1249
|
+
Control 17 Home 36 ;: 186 \| 220
|
|
1250
|
+
Alt 18 ← 37 =+ 187 ]} 221
|
|
1251
|
+
Cape Lock 20 ↑ 38 ,< 188 '" 222
|
|
1252
|
+
|
|
1253
|
+
多媒体键码值(keyCode)
|
|
1254
|
+
按键 键码
|
|
1255
|
+
音量加 175
|
|
1256
|
+
音量减 174
|
|
1257
|
+
停止 179
|
|
1258
|
+
静音 173
|
|
1259
|
+
浏览器 172
|
|
1260
|
+
邮件 180
|
|
1261
|
+
搜索 170
|
|
1262
|
+
收藏 171
|
|
1263
|
+
**/
|
|
1264
|
+
onKeyboard(
|
|
1265
1265
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | Window | Node | typeof globalThis,
|
|
1266
|
-
eventName: "
|
|
1267
|
-
|
|
1266
|
+
eventName: "keydown" | "keypress" | "keyup" = "keypress",
|
|
1267
|
+
handler: (keyName: string, keyValue: number, otherCodeList: string[], event: KeyboardEvent) => void,
|
|
1268
1268
|
options?: DOMUtilsEventListenerOption | boolean
|
|
1269
1269
|
): {
|
|
1270
1270
|
removeListen(): void;
|
|
@@ -1292,8 +1292,8 @@ class ElementEvent extends ElementAnimate {
|
|
|
1292
1292
|
if (event.shiftKey) {
|
|
1293
1293
|
otherCodeList.push("shift");
|
|
1294
1294
|
}
|
|
1295
|
-
if (typeof
|
|
1296
|
-
|
|
1295
|
+
if (typeof handler === "function") {
|
|
1296
|
+
handler(keyName, keyValue, otherCodeList, event);
|
|
1297
1297
|
}
|
|
1298
1298
|
};
|
|
1299
1299
|
that.on(element, eventName, keyboardEventCallBack, options);
|
|
@@ -1303,6 +1303,141 @@ class ElementEvent extends ElementAnimate {
|
|
|
1303
1303
|
},
|
|
1304
1304
|
};
|
|
1305
1305
|
}
|
|
1306
|
+
/**
|
|
1307
|
+
* 监input、textarea的输入框值改变的事件(当输入法输入时,不会触发该监听)
|
|
1308
|
+
* @param $el 输入框元素
|
|
1309
|
+
* @param handler 回调函数
|
|
1310
|
+
* @param option 配置
|
|
1311
|
+
*/
|
|
1312
|
+
onInput(
|
|
1313
|
+
$el: HTMLInputElement | HTMLTextAreaElement,
|
|
1314
|
+
handler: (evt: InputEvent) => void | Promise<void>,
|
|
1315
|
+
option?: DOMUtilsEventListenerOption | boolean
|
|
1316
|
+
) {
|
|
1317
|
+
/**
|
|
1318
|
+
* 是否正在输入中
|
|
1319
|
+
*/
|
|
1320
|
+
let isComposite = false;
|
|
1321
|
+
const __callback = async (event: InputEvent) => {
|
|
1322
|
+
if (isComposite) return;
|
|
1323
|
+
await handler(event);
|
|
1324
|
+
};
|
|
1325
|
+
const __composition_start_callback = () => {
|
|
1326
|
+
isComposite = true;
|
|
1327
|
+
};
|
|
1328
|
+
const __composition_end_callback = () => {
|
|
1329
|
+
isComposite = false;
|
|
1330
|
+
this.emit($el, "input", {
|
|
1331
|
+
isComposite,
|
|
1332
|
+
});
|
|
1333
|
+
};
|
|
1334
|
+
const inputListener = this.on($el, "input", __callback, option);
|
|
1335
|
+
const compositionStartListener = this.on($el, "compositionstart", __composition_start_callback, option);
|
|
1336
|
+
const compositionEndListener = this.on($el, "compositionend", __composition_end_callback, option);
|
|
1337
|
+
|
|
1338
|
+
return {
|
|
1339
|
+
off: () => {
|
|
1340
|
+
inputListener.off();
|
|
1341
|
+
compositionStartListener.off();
|
|
1342
|
+
compositionEndListener.off();
|
|
1343
|
+
},
|
|
1344
|
+
};
|
|
1345
|
+
}
|
|
1346
|
+
/**
|
|
1347
|
+
* 双击监听,适配移动端
|
|
1348
|
+
*/
|
|
1349
|
+
onDoubleClick(
|
|
1350
|
+
$el: DOMUtilsTargetElementType,
|
|
1351
|
+
handler: (event: MouseEvent | PointerEvent | TouchEvent) => void | Promise<void>,
|
|
1352
|
+
options?: DOMUtilsEventListenerOption | boolean
|
|
1353
|
+
): {
|
|
1354
|
+
off(): void;
|
|
1355
|
+
};
|
|
1356
|
+
onDoubleClick(
|
|
1357
|
+
$el: DOMUtilsTargetElementType,
|
|
1358
|
+
selector: string | string[] | undefined | null,
|
|
1359
|
+
handler: (event: MouseEvent | PointerEvent | TouchEvent) => void | Promise<void>,
|
|
1360
|
+
options?: DOMUtilsEventListenerOption | boolean
|
|
1361
|
+
): {
|
|
1362
|
+
off(): void;
|
|
1363
|
+
};
|
|
1364
|
+
onDoubleClick(...args: any[]): {
|
|
1365
|
+
off(): void;
|
|
1366
|
+
} {
|
|
1367
|
+
const $el: DOMUtilsTargetElementType = args[0];
|
|
1368
|
+
let selector: string | string[] | undefined | null = void 0;
|
|
1369
|
+
let handler: (event: MouseEvent | PointerEvent | TouchEvent) => void | Promise<void>;
|
|
1370
|
+
let options: DOMUtilsEventListenerOption | boolean | undefined;
|
|
1371
|
+
if (args.length === 2) {
|
|
1372
|
+
if (typeof args[1] === "function") {
|
|
1373
|
+
handler = args[1];
|
|
1374
|
+
} else {
|
|
1375
|
+
throw new TypeError("handler is not a function");
|
|
1376
|
+
}
|
|
1377
|
+
} else if (args.length === 3) {
|
|
1378
|
+
if (typeof args[1] === "function") {
|
|
1379
|
+
handler = args[1];
|
|
1380
|
+
options = args[2];
|
|
1381
|
+
} else {
|
|
1382
|
+
selector = args[1];
|
|
1383
|
+
handler = args[2];
|
|
1384
|
+
}
|
|
1385
|
+
} else if (args.length === 4) {
|
|
1386
|
+
selector = args[1];
|
|
1387
|
+
handler = args[2];
|
|
1388
|
+
options = args[3];
|
|
1389
|
+
} else {
|
|
1390
|
+
throw new Error("args length error");
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
let $click: Element | null = null;
|
|
1394
|
+
let isDoubleClick = false;
|
|
1395
|
+
let timer: number | undefined = void 0;
|
|
1396
|
+
/** 是否是移动端点击 */
|
|
1397
|
+
let isMobileTouch = false;
|
|
1398
|
+
|
|
1399
|
+
const dblclick_handler = async (evt: MouseEvent | PointerEvent | TouchEvent) => {
|
|
1400
|
+
if (evt.type === "dblclick" && isMobileTouch) {
|
|
1401
|
+
// 禁止在移动端触发dblclick事件
|
|
1402
|
+
return;
|
|
1403
|
+
}
|
|
1404
|
+
await handler(evt);
|
|
1405
|
+
};
|
|
1406
|
+
|
|
1407
|
+
const dblClickListener = this.on($el, "dblclick", dblclick_handler, options);
|
|
1408
|
+
const touchEndListener = this.on(
|
|
1409
|
+
$el,
|
|
1410
|
+
"touchend",
|
|
1411
|
+
selector,
|
|
1412
|
+
(evt, selectorTarget) => {
|
|
1413
|
+
isMobileTouch = true;
|
|
1414
|
+
CommonUtils.clearTimeout(timer);
|
|
1415
|
+
timer = void 0;
|
|
1416
|
+
if (isDoubleClick && $click === selectorTarget) {
|
|
1417
|
+
isDoubleClick = false;
|
|
1418
|
+
$click = null;
|
|
1419
|
+
/* 判定为双击 */
|
|
1420
|
+
dblclick_handler(evt);
|
|
1421
|
+
} else {
|
|
1422
|
+
timer = CommonUtils.setTimeout(() => {
|
|
1423
|
+
isDoubleClick = false;
|
|
1424
|
+
// 判断为单击
|
|
1425
|
+
}, 200);
|
|
1426
|
+
isDoubleClick = true;
|
|
1427
|
+
$click = selectorTarget;
|
|
1428
|
+
}
|
|
1429
|
+
},
|
|
1430
|
+
options
|
|
1431
|
+
);
|
|
1432
|
+
|
|
1433
|
+
return {
|
|
1434
|
+
off() {
|
|
1435
|
+
$click = null;
|
|
1436
|
+
dblClickListener.off();
|
|
1437
|
+
touchEndListener.off();
|
|
1438
|
+
},
|
|
1439
|
+
};
|
|
1440
|
+
}
|
|
1306
1441
|
/**
|
|
1307
1442
|
* 阻止事件传递
|
|
1308
1443
|
* @param event 要阻止传递的事件
|