@whitesev/domutils 1.7.4 → 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.
@@ -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 callback 绑定事件触发的回调函数
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
- callback: (this: HTMLElement, event: DOMUtils_Event[T]) => void,
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 callback 绑定事件触发的回调函数
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
- callback: (this: HTMLElement, event: T) => void,
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 callback 绑定事件触发的回调函数
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
- callback: (this: HTMLElement, event: DOMUtils_Event[T], selectorTarget: HTMLElement) => void,
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 callback 绑定事件触发的回调函数
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
- callback: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void,
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
- trigger() {},
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 useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
335
+ * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
336
336
  */
337
- trigger: (details?: object, useDispatchToTriggerEvent?: boolean) => {
338
- that.trigger($elList, eventTypeList, details, useDispatchToTriggerEvent);
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.ready(function(){
661
+ * DOMUtils.onReady(function(){
662
662
  * console.log("文档加载完毕")
663
663
  * });
664
664
  * > "文档加载完毕"
665
665
  * @example
666
- * await DOMUtils.ready();
666
+ * await DOMUtils.onReady();
667
667
  * console.log("文档加载完毕");
668
668
  * > "文档加载完毕"
669
669
  */
670
- ready(): Promise<void>;
671
- ready(callback: (...args: any[]) => any): void;
672
- ready(...args: any[]): void | Promise<void> {
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 useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
765
+ * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
766
766
  * @example
767
767
  * // 触发元素a.xx的click事件
768
- * DOMUtils.trigger(document.querySelector("a.xx"),"click")
769
- * DOMUtils.trigger("a.xx","click")
768
+ * DOMUtils.emit(document.querySelector("a.xx"),"click")
769
+ * DOMUtils.emit("a.xx","click")
770
770
  * // 触发元素a.xx的click、tap、hover事件
771
- * DOMUtils.trigger(document.querySelector("a.xx"),"click tap hover")
772
- * DOMUtils.trigger("a.xx",["click","tap","hover"])
771
+ * DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
772
+ * DOMUtils.emit("a.xx",["click","tap","hover"])
773
773
  */
774
- trigger(
774
+ emit(
775
775
  element: DOMUtilsTargetElementType | Element | DocumentFragment | any[] | typeof globalThis | Window | Document,
776
776
  eventType: string | string[],
777
777
  details?: object,
778
- useDispatchToTriggerEvent?: boolean
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 useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
785
+ * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
786
786
  * @example
787
787
  * // 触发元素a.xx的click事件
788
- * DOMUtils.trigger(document.querySelector("a.xx"),"click")
789
- * DOMUtils.trigger("a.xx","click")
788
+ * DOMUtils.emit(document.querySelector("a.xx"),"click")
789
+ * DOMUtils.emit("a.xx","click")
790
790
  * // 触发元素a.xx的click、tap、hover事件
791
- * DOMUtils.trigger(document.querySelector("a.xx"),"click tap hover")
792
- * DOMUtils.trigger("a.xx",["click","tap","hover"])
791
+ * DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
792
+ * DOMUtils.emit("a.xx",["click","tap","hover"])
793
793
  */
794
- trigger(
794
+ emit(
795
795
  element: Element | string | NodeList | any[] | Window | Document,
796
796
  eventType: DOMUtils_EventType | DOMUtils_EventType[],
797
797
  details?: object,
798
- useDispatchToTriggerEvent?: boolean
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 useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
805
+ * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
806
806
  * @example
807
807
  * // 触发元素a.xx的click事件
808
- * DOMUtils.trigger(document.querySelector("a.xx"),"click")
809
- * DOMUtils.trigger("a.xx","click")
808
+ * DOMUtils.emit(document.querySelector("a.xx"),"click")
809
+ * DOMUtils.emit("a.xx","click")
810
810
  * // 触发元素a.xx的click、tap、hover事件
811
- * DOMUtils.trigger(document.querySelector("a.xx"),"click tap hover")
812
- * DOMUtils.trigger("a.xx",["click","tap","hover"])
811
+ * DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
812
+ * DOMUtils.emit("a.xx",["click","tap","hover"])
813
813
  */
814
- trigger(
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
- useDispatchToTriggerEvent: boolean = true
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 (useDispatchToTriggerEvent == false && eventTypeItem in elementEvents) {
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
- * 绑定或触发元素的click事件
874
+ * 监听或触发元素的click事件
875
875
  * @param element 目标元素
876
876
  * @param handler (可选)事件处理函数
877
877
  * @param details (可选)赋予触发的Event的额外属性
878
- * @param useDispatchToTriggerEvent (可选)是否使用dispatchEvent来触发事件,默认true
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
- useDispatchToTriggerEvent?: boolean
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, useDispatchToTriggerEvent);
903
+ that.click($ele as HTMLElement, handler, details, useDispatchToEmit);
904
904
  });
905
905
  return;
906
906
  }
907
907
  if (handler == null) {
908
- that.trigger(element, "click", details, useDispatchToTriggerEvent);
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
- * 绑定或触发元素的blur事件
914
+ * 监听或触发元素的blur事件
915
915
  * @param element 目标元素
916
916
  * @param handler (可选)事件处理函数
917
917
  * @param details (可选)赋予触发的Event的额外属性
918
- * @param useDispatchToTriggerEvent (可选)是否使用dispatchEvent来触发事件,默认true
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
- useDispatchToTriggerEvent?: boolean
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, useDispatchToTriggerEvent);
943
+ that.focus($ele as HTMLElement, handler, details, useDispatchToEmit);
944
944
  });
945
945
  return;
946
946
  }
947
947
  if (handler === null) {
948
- that.trigger(element, "blur", details, useDispatchToTriggerEvent);
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
- * 绑定或触发元素的focus事件
954
+ * 监听或触发元素的focus事件
955
955
  * @param element 目标元素
956
956
  * @param handler (可选)事件处理函数
957
957
  * @param details (可选)赋予触发的Event的额外属性
958
- * @param useDispatchToTriggerEvent (可选)是否使用dispatchEvent来触发事件,默认true
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
- useDispatchToTriggerEvent?: boolean
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, useDispatchToTriggerEvent);
983
+ that.focus($ele as HTMLElement, handler, details, useDispatchToEmit);
984
984
  });
985
985
  return;
986
986
  }
987
987
  if (handler == null) {
988
- that.trigger(element, "focus", details, useDispatchToTriggerEvent);
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.hover(document.querySelector("a.xx"),()=>{
1000
+ * DOMUtils.onHover(document.querySelector("a.xx"),()=>{
1001
1001
  * console.log("移入/移除");
1002
1002
  * })
1003
- * DOMUtils.hover("a.xx",()=>{
1003
+ * DOMUtils.onHover("a.xx",()=>{
1004
1004
  * console.log("移入/移除");
1005
1005
  * })
1006
1006
  */
1007
- hover(
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.hover($ele as HTMLElement, handler, option);
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
- animationend(
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
- transitionend(
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
- keyup(
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.keyup($ele as HTMLElement, handler, option);
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
- keydown(
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.keydown($ele as HTMLElement, handler, option);
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
- keypress(
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.keypress($ele as HTMLElement, handler, option);
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
- * 监听某个元素键盘按键事件或window全局按键事件
1203
- * 按下有值的键时触发,按下Ctrl\Alt\Shift\Meta是无值键。按下先触发keydown事件,再触发keypress事件。
1204
- * @param element 需要监听的对象,可以是全局Window或者某个元素
1205
- * @param eventName 事件名,默认keypress
1206
- * @param callback 自己定义的回调事件,参数1为当前的key,参数2为组合按键,数组类型,包含ctrl、shift、alt和meta(win键或mac的cmd键)
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
- * @example
1209
- Utils.listenKeyboard(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
- listenKeyboard(
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: "keyup" | "keypress" | "keydown" = "keypress",
1267
- callback: (keyName: string, keyValue: number, otherCodeList: string[], event: KeyboardEvent) => void,
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 callback === "function") {
1296
- callback(keyName, keyValue, otherCodeList, event);
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 要阻止传递的事件