@whitesev/domutils 1.9.6 → 1.9.9
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 +46 -80
- 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 +46 -80
- 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 +46 -80
- 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 +46 -80
- 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 +46 -80
- 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 +46 -80
- 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 +14 -27
- package/dist/types/src/types/DOMUtilsEvent.d.ts +6 -1
- package/package.json +6 -6
- package/src/ElementEvent.ts +62 -88
- package/src/Utils.ts +0 -1
- package/src/types/DOMUtilsEvent.d.ts +6 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@whitesev/domutils",
|
|
4
|
-
"version": "1.9.
|
|
4
|
+
"version": "1.9.9",
|
|
5
5
|
"description": "适合在浏览器中操作DOM的常用工具类",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"typescript",
|
|
@@ -33,20 +33,20 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@eslint/js": "^9.39.2",
|
|
36
|
-
"@rollup/plugin-commonjs": "^29.0.
|
|
36
|
+
"@rollup/plugin-commonjs": "^29.0.1",
|
|
37
37
|
"@rollup/plugin-json": "^6.1.0",
|
|
38
38
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
39
39
|
"@rollup/plugin-terser": "^0.4.4",
|
|
40
40
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
41
41
|
"browserslist": "^4.28.1",
|
|
42
|
-
"caniuse-lite": "^1.0.
|
|
42
|
+
"caniuse-lite": "^1.0.30001776",
|
|
43
43
|
"eslint": "^9.39.2",
|
|
44
44
|
"eslint-config-prettier": "^10.1.8",
|
|
45
45
|
"eslint-plugin-compat": "^6.0.2",
|
|
46
|
-
"eslint-plugin-prettier": "^5.5.
|
|
46
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
47
47
|
"globals": "^16.5.0",
|
|
48
|
-
"oxfmt": "^0.
|
|
49
|
-
"oxlint": "1.
|
|
48
|
+
"oxfmt": "^0.36.0",
|
|
49
|
+
"oxlint": "1.51.0",
|
|
50
50
|
"rollup": "^4.54.0",
|
|
51
51
|
"rollup-plugin-clear": "^2.0.7",
|
|
52
52
|
"tslib": "^2.8.1",
|
package/src/ElementEvent.ts
CHANGED
|
@@ -533,15 +533,6 @@ class ElementEvent extends ElementAnimate {
|
|
|
533
533
|
// 这是存在selector的情况
|
|
534
534
|
listenerOption = getOption(args, 4, listenerOption);
|
|
535
535
|
}
|
|
536
|
-
// 是否移除所有事件
|
|
537
|
-
let isRemoveAll = false;
|
|
538
|
-
if (args.length === 2) {
|
|
539
|
-
// 目标函数、事件名
|
|
540
|
-
isRemoveAll = true;
|
|
541
|
-
} else if ((args.length === 3 && typeof args[2] === "string") || Array.isArray(args[2])) {
|
|
542
|
-
// 目标函数、事件名、子元素选择器
|
|
543
|
-
isRemoveAll = true;
|
|
544
|
-
}
|
|
545
536
|
if (args.length === 5 && typeof args[4] === "function" && typeof filter !== "function") {
|
|
546
537
|
// 目标函数、事件名、回调函数、事件配置、过滤函数
|
|
547
538
|
filter = option as (
|
|
@@ -579,7 +570,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
579
570
|
// 事件的配置项不同
|
|
580
571
|
flag = false;
|
|
581
572
|
}
|
|
582
|
-
if (flag
|
|
573
|
+
if (flag) {
|
|
583
574
|
$elItem.removeEventListener(eventName, handler.handlerCallBack, handler.option);
|
|
584
575
|
const findIndex = handlers.findIndex((item) => item === handler);
|
|
585
576
|
if (findIndex !== -1) {
|
|
@@ -830,20 +821,23 @@ class ElementEvent extends ElementAnimate {
|
|
|
830
821
|
/**
|
|
831
822
|
* 主动触发事件
|
|
832
823
|
* @param element 需要触发的元素|元素数组|window
|
|
833
|
-
* @param
|
|
834
|
-
* @param extraDetails
|
|
835
|
-
* @param useDispatchToTriggerEvent
|
|
824
|
+
* @param event 触发的事件
|
|
825
|
+
* @param extraDetails (可选)赋予触发的Event的额外属性
|
|
826
|
+
* @param useDispatchToTriggerEvent (可选)是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用通过.on监听的callback(),但是这种只有一个入参,如果使用$selector则没有值
|
|
836
827
|
* @example
|
|
837
|
-
*
|
|
838
|
-
*
|
|
839
|
-
* DOMUtils.emit("a.xx","click")
|
|
840
|
-
*
|
|
841
|
-
*
|
|
842
|
-
*
|
|
828
|
+
* DOMUtils.emit("a.xx", new Event("click"))
|
|
829
|
+
* @example
|
|
830
|
+
* DOMUtils.emit("a.xx", new Event("click"), {
|
|
831
|
+
* disableHook: true
|
|
832
|
+
* })
|
|
833
|
+
* @example
|
|
834
|
+
* DOMUtils.emit("a.xx", new Event("click"), {
|
|
835
|
+
* disableHook: true
|
|
836
|
+
* },false)
|
|
843
837
|
*/
|
|
844
838
|
emit(
|
|
845
839
|
element: Element | string | NodeList | any[] | Window | Document,
|
|
846
|
-
|
|
840
|
+
event: Event,
|
|
847
841
|
extraDetails?: object,
|
|
848
842
|
useDispatchToTriggerEvent?: boolean
|
|
849
843
|
): void;
|
|
@@ -863,7 +857,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
863
857
|
*/
|
|
864
858
|
emit(
|
|
865
859
|
element: Element | string | NodeList | any[] | Window | Document,
|
|
866
|
-
eventType: DOMUtils_EventType | DOMUtils_EventType[] | string | string[],
|
|
860
|
+
eventType: DOMUtils_EventType | DOMUtils_EventType[] | string | string[] | Event,
|
|
867
861
|
extraDetails?: object | boolean,
|
|
868
862
|
useDispatchToTriggerEvent: boolean = true
|
|
869
863
|
) {
|
|
@@ -880,11 +874,33 @@ class ElementEvent extends ElementAnimate {
|
|
|
880
874
|
} else {
|
|
881
875
|
$elList.push(element);
|
|
882
876
|
}
|
|
877
|
+
|
|
878
|
+
/**
|
|
879
|
+
* 主动添加属性
|
|
880
|
+
*/
|
|
881
|
+
const addExtraProp = (event: Event, obj: any) => {
|
|
882
|
+
if (event instanceof Event && typeof obj === "object" && obj != null && !Array.isArray(obj)) {
|
|
883
|
+
const detailKeys = Object.keys(obj);
|
|
884
|
+
detailKeys.forEach((keyName) => {
|
|
885
|
+
const value = Reflect.get(obj, keyName);
|
|
886
|
+
// 在event上添加属性
|
|
887
|
+
Reflect.set(event, keyName, value);
|
|
888
|
+
});
|
|
889
|
+
}
|
|
890
|
+
};
|
|
891
|
+
|
|
883
892
|
let eventTypeList: string[] = [];
|
|
893
|
+
/**
|
|
894
|
+
* 主动传递的事件
|
|
895
|
+
*/
|
|
896
|
+
let __event__: Event | null = null;
|
|
884
897
|
if (Array.isArray(eventType)) {
|
|
885
898
|
eventTypeList = eventType.filter((it) => typeof it === "string" && it.trim() !== "");
|
|
886
899
|
} else if (typeof eventType === "string") {
|
|
887
900
|
eventTypeList = eventType.split(" ");
|
|
901
|
+
} else if (eventType instanceof Event) {
|
|
902
|
+
__event__ = eventType;
|
|
903
|
+
addExtraProp(__event__, extraDetails);
|
|
888
904
|
}
|
|
889
905
|
|
|
890
906
|
$elList.forEach(($elItem) => {
|
|
@@ -892,31 +908,34 @@ class ElementEvent extends ElementAnimate {
|
|
|
892
908
|
const elementEvents: {
|
|
893
909
|
[key: string]: DOMUtilsEventListenerOptionsAttribute[];
|
|
894
910
|
} = Reflect.get($elItem, GlobalData.domEventSymbol) || {};
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
// 构造事件
|
|
901
|
-
event = new Event(eventTypeItem);
|
|
902
|
-
if (typeof extraDetails === "object" && extraDetails != null) {
|
|
903
|
-
const detailKeys = Object.keys(extraDetails);
|
|
904
|
-
detailKeys.forEach((keyName) => {
|
|
905
|
-
const value = Reflect.get(extraDetails, keyName);
|
|
906
|
-
// 在event上添加属性
|
|
907
|
-
Reflect.set(event, keyName, value);
|
|
908
|
-
});
|
|
909
|
-
}
|
|
910
|
-
}
|
|
911
|
+
|
|
912
|
+
/**
|
|
913
|
+
* 触发事件
|
|
914
|
+
*/
|
|
915
|
+
const dispatchEvent = (event: Event, eventTypeItem: string) => {
|
|
911
916
|
if (useDispatchToTriggerEvent == false && eventTypeItem in elementEvents) {
|
|
912
|
-
//
|
|
917
|
+
// 直接调用.on监听的事件
|
|
913
918
|
elementEvents[eventTypeItem].forEach((eventsItem) => {
|
|
914
919
|
eventsItem.handlerCallBack(event);
|
|
915
920
|
});
|
|
916
921
|
} else {
|
|
917
922
|
$elItem.dispatchEvent(event);
|
|
918
923
|
}
|
|
919
|
-
}
|
|
924
|
+
};
|
|
925
|
+
|
|
926
|
+
if (__event__) {
|
|
927
|
+
// 使用主动传递的事件直接触发
|
|
928
|
+
const event = __event__;
|
|
929
|
+
const eventTypeItem = event.type;
|
|
930
|
+
dispatchEvent(event, eventTypeItem);
|
|
931
|
+
} else {
|
|
932
|
+
eventTypeList.forEach((eventTypeItem) => {
|
|
933
|
+
// 构造事件
|
|
934
|
+
const event = new Event(eventTypeItem);
|
|
935
|
+
addExtraProp(event, extraDetails);
|
|
936
|
+
dispatchEvent(event, eventTypeItem);
|
|
937
|
+
});
|
|
938
|
+
}
|
|
920
939
|
});
|
|
921
940
|
}
|
|
922
941
|
|
|
@@ -1255,53 +1274,6 @@ class ElementEvent extends ElementAnimate {
|
|
|
1255
1274
|
}
|
|
1256
1275
|
return that.on(element, "keydown", null, handler, option);
|
|
1257
1276
|
}
|
|
1258
|
-
/**
|
|
1259
|
-
* 当按键按下时触发事件
|
|
1260
|
-
* keydown - > keypress - > keyup
|
|
1261
|
-
* @param element 目标
|
|
1262
|
-
* @param handler 事件处理函数
|
|
1263
|
-
* @param option 配置
|
|
1264
|
-
* @example
|
|
1265
|
-
* // 监听a.xx元素的按键按下
|
|
1266
|
-
* DOMUtils.keypress(document.querySelector("a.xx"),()=>{
|
|
1267
|
-
* console.log("按键按下");
|
|
1268
|
-
* })
|
|
1269
|
-
* DOMUtils.keypress("a.xx",()=>{
|
|
1270
|
-
* console.log("按键按下");
|
|
1271
|
-
* })
|
|
1272
|
-
*/
|
|
1273
|
-
onKeypress(
|
|
1274
|
-
element: DOMUtilsTargetElementType | Element | DocumentFragment | Window | Node | typeof globalThis,
|
|
1275
|
-
handler: (this: HTMLElement, event: DOMUtils_Event["keypress"]) => void,
|
|
1276
|
-
option?: boolean | DOMUtilsEventListenerOption
|
|
1277
|
-
) {
|
|
1278
|
-
const that = this;
|
|
1279
|
-
if (element == null) {
|
|
1280
|
-
return;
|
|
1281
|
-
}
|
|
1282
|
-
if (typeof element === "string") {
|
|
1283
|
-
element = that.selectorAll(element);
|
|
1284
|
-
}
|
|
1285
|
-
if (CommonUtils.isNodeList(element)) {
|
|
1286
|
-
// 设置
|
|
1287
|
-
const listenerList: (DOMUtilsAddEventListenerResult | undefined)[] = [];
|
|
1288
|
-
element.forEach(($ele) => {
|
|
1289
|
-
const listener = that.onKeypress($ele as HTMLElement, handler, option);
|
|
1290
|
-
listenerList.push(listener);
|
|
1291
|
-
});
|
|
1292
|
-
return {
|
|
1293
|
-
off() {
|
|
1294
|
-
listenerList.forEach((listener) => {
|
|
1295
|
-
if (!listener) {
|
|
1296
|
-
return;
|
|
1297
|
-
}
|
|
1298
|
-
listener.off();
|
|
1299
|
-
});
|
|
1300
|
-
},
|
|
1301
|
-
} as DOMUtilsAddEventListenerResult;
|
|
1302
|
-
}
|
|
1303
|
-
return that.on(element, "keypress", null, handler, option);
|
|
1304
|
-
}
|
|
1305
1277
|
/**
|
|
1306
1278
|
* 监听某个元素键盘按键事件或window全局按键事件
|
|
1307
1279
|
* 按下有值的键时触发,按下Ctrl\Alt\Shift\Meta是无值键。按下先触发keydown事件,再触发keypress事件。
|
|
@@ -1367,7 +1339,7 @@ class ElementEvent extends ElementAnimate {
|
|
|
1367
1339
|
**/
|
|
1368
1340
|
onKeyboard(
|
|
1369
1341
|
element: DOMUtilsTargetElementType | Element | DocumentFragment | Window | Node | typeof globalThis,
|
|
1370
|
-
eventName: "keydown" | "
|
|
1342
|
+
eventName: "keydown" | "keyup" = "keydown",
|
|
1371
1343
|
handler: (keyName: string, keyValue: number, otherCodeList: string[], event: KeyboardEvent) => void,
|
|
1372
1344
|
options?: DOMUtilsEventListenerOption | boolean
|
|
1373
1345
|
): DOMUtilsAddEventListenerResult {
|
|
@@ -1687,7 +1659,9 @@ class ElementEvent extends ElementAnimate {
|
|
|
1687
1659
|
onlyStopPropagation?: boolean;
|
|
1688
1660
|
}
|
|
1689
1661
|
| undefined = void 0;
|
|
1690
|
-
if (
|
|
1662
|
+
if (args.length === 2) {
|
|
1663
|
+
// ignore
|
|
1664
|
+
} else if (typeof args[2] === "string" || Array.isArray(args[2])) {
|
|
1691
1665
|
// selector
|
|
1692
1666
|
selector = args[2];
|
|
1693
1667
|
if (typeof args[3] === "object" && args[3] != null) {
|
package/src/Utils.ts
CHANGED
|
@@ -47,7 +47,12 @@ export type DOMUtils_MouseEventType = keyof DOMUtils_MouseEvent;
|
|
|
47
47
|
export interface DOMUtils_KeyboardEvent {
|
|
48
48
|
/** 键盘按下事件 */
|
|
49
49
|
keydown: KeyboardEvent;
|
|
50
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* 键盘按压事件(字符键)
|
|
52
|
+
*
|
|
53
|
+
* @link https://developer.mozilla.org/zh-CN/docs/Web/API/Element/keypress_event
|
|
54
|
+
* @deprecated
|
|
55
|
+
*/
|
|
51
56
|
keypress: KeyboardEvent;
|
|
52
57
|
/** 键盘释放事件 */
|
|
53
58
|
keyup: KeyboardEvent;
|