@whitesev/domutils 1.8.0 → 1.8.2

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.
@@ -14,44 +14,114 @@ export type DOMUtilsCreateElementAttributesMap = {
14
14
  * 鼠标事件
15
15
  * + https://blog.csdn.net/weixin_68658847/article/details/126939879
16
16
  */
17
-
18
17
  export interface DOMUtils_MouseEvent {
18
+ /** 鼠标点击事件 */
19
19
  click: MouseEvent | PointerEvent;
20
+ /** 鼠标中键点击事件 */
20
21
  auxclick: PointerEvent;
22
+ /** 右键菜单事件 */
21
23
  contextmenu: MouseEvent | PointerEvent;
24
+ /** 鼠标双击事件 */
22
25
  dblclick: MouseEvent | PointerEvent;
26
+ /** 鼠标按下事件 */
23
27
  mousedown: MouseEvent | PointerEvent;
28
+ /** 鼠标进入元素事件 */
24
29
  mouseenter: MouseEvent | PointerEvent;
30
+ /** 鼠标离开元素事件 */
25
31
  mouseleave: MouseEvent | PointerEvent;
32
+ /** 鼠标移动事件 */
26
33
  mousemove: MouseEvent | PointerEvent;
34
+ /** 鼠标悬停在元素上事件 */
27
35
  mouseover: MouseEvent | PointerEvent;
36
+ /** 鼠标从元素上移出事件 */
28
37
  mouseout: MouseEvent | PointerEvent;
38
+ /** 鼠标按键释放事件 */
29
39
  mouseup: MouseEvent | PointerEvent;
40
+ /** 鼠标悬停事件 */
30
41
  hover: MouseEvent;
31
42
  }
32
43
  export type DOMUtils_MouseEventType = keyof DOMUtils_MouseEvent;
33
44
  /**
34
- * 鼠标事件
45
+ * 键盘事件
35
46
  */
36
47
  export interface DOMUtils_KeyboardEvent {
48
+ /** 键盘按下事件 */
37
49
  keydown: KeyboardEvent;
50
+ /** 键盘按压事件(字符键) */
38
51
  keypress: KeyboardEvent;
52
+ /** 键盘释放事件 */
39
53
  keyup: KeyboardEvent;
40
54
  }
41
55
  export type DOMUtils_KeyboardEventType = keyof DOMUtils_KeyboardEvent;
56
+ /**
57
+ * 指针事件
58
+ */
59
+ export interface DOMUtils_PointerEvent {
60
+ /**
61
+ * 当定点设备进入某个元素的命中检测 范围时触发。
62
+ */
63
+ pointerover: PointerEvent;
64
+ /**
65
+ * 当定点设备进入某个元素或其子元素的命中检测范围时,或做为某一类不支悬停(hover)状态的设备所触发的 poinerdown 事件的后续事件时所触发。(详情可见 pointerdown 事件类型)。
66
+ */
67
+ pointerenter: PointerEvent;
68
+ /**
69
+ * 当某指针得以激活时触发。
70
+ */
71
+ pointerdown: PointerEvent;
72
+ /**
73
+ * 当某指针改变其坐标时触发。
74
+ */
75
+ pointermove: PointerEvent;
76
+ /**
77
+ * 当某指针不再活跃时触发。
78
+ */
79
+ pointerup: PointerEvent;
80
+ /**
81
+ * 当浏览器认为某指针不会再生成新的后续事件时触发(例如某设备不再活跃)
82
+ */
83
+ pointercancel: PointerEvent;
84
+ /**
85
+ * 可能由若干原因触发该事件,包括:定位设备移出了某命中检测的边界;不支持悬浮状态的设备发生 pointerup 事件(见 pointerup 事件);作为 pointercancel 事件的后续事件(见 pointercancel 事件);当数位板检测到数位笔离开了悬浮区域时。
86
+ */
87
+ pointerout: PointerEvent;
88
+ /**
89
+ * 当定点设备移出某元素的命中检测边界时触发。对于笔形设备来说,当数位板检测到笔移出了悬浮范围时触发。
90
+ */
91
+ pointerleave: PointerEvent;
92
+ /**
93
+ * 当某元素接受到一个指针捕捉时触发。
94
+ */
95
+ gotpointercapture: PointerEvent;
96
+ /**
97
+ * 当针对某个指针的指针捕捉得到释放时触发。
98
+ */
99
+ lostpointercapture: PointerEvent;
100
+ }
101
+ export type DOMUtils_PointerEventType = keyof DOMUtils_PointerEvent;
42
102
  /**
43
103
  * 框架/对象事件
44
104
  */
45
105
  export interface DOMUtils_Frame_Object_Event {
106
+ /** 资源加载被中止事件 */
46
107
  abort: Event;
108
+ /** 页面即将卸载前事件 */
47
109
  beforeunload: Event;
110
+ /** JavaScript错误事件 */
48
111
  error: Event;
112
+ /** URL哈希值改变事件 */
49
113
  hashchange: Event;
114
+ /** 页面加载完成事件 */
50
115
  load: Event;
116
+ /** 页面显示事件(包括缓存页面) */
51
117
  pageshow: Event;
118
+ /** 页面隐藏事件 */
52
119
  pagehide: Event;
120
+ /** 窗口大小调整事件 */
53
121
  resize: Event;
122
+ /** 滚动事件 */
54
123
  scroll: Event;
124
+ /** 页面卸载事件 */
55
125
  unload: Event;
56
126
  }
57
127
  export type DOMUtils_Frame_Object_EventType = keyof DOMUtils_Frame_Object_Event;
@@ -59,13 +129,21 @@ export type DOMUtils_Frame_Object_EventType = keyof DOMUtils_Frame_Object_Event;
59
129
  * 表单事件
60
130
  */
61
131
  export interface DOMUtils_FormEvent {
132
+ /** 元素失去焦点事件 */
62
133
  blur: Event;
134
+ /** 表单控件值改变事件 */
63
135
  change: Event;
136
+ /** 元素获得焦点事件 */
64
137
  focus: Event;
138
+ /** 元素将要获得焦点事件(不冒泡) */
65
139
  focusin: Event;
140
+ /** 元素将要失去焦点事件(不冒泡) */
66
141
  focusout: Event;
142
+ /** 输入框内容改变事件 */
67
143
  input: Event;
144
+ /** 表单重置事件 */
68
145
  reset: Event;
146
+ /** 搜索框搜索事件 */
69
147
  search: Event;
70
148
  }
71
149
  export type DOMUtils_FormEventType = keyof DOMUtils_FormEvent;
@@ -74,8 +152,11 @@ export type DOMUtils_FormEventType = keyof DOMUtils_FormEvent;
74
152
  * 剪贴板事件
75
153
  */
76
154
  export interface DOMUtils_ClipboardEvent {
155
+ /** 复制事件 */
77
156
  copy: ClipboardEvent;
157
+ /** 剪切事件 */
78
158
  cut: ClipboardEvent;
159
+ /** 粘贴事件 */
79
160
  paste: ClipboardEvent;
80
161
  }
81
162
  export type DOMUtils_ClipboardEventType = keyof DOMUtils_ClipboardEvent;
@@ -84,7 +165,9 @@ export type DOMUtils_ClipboardEventType = keyof DOMUtils_ClipboardEvent;
84
165
  * 打印事件
85
166
  */
86
167
  export interface DOMUtils_PrintEvent {
168
+ /** 打印之后事件 */
87
169
  afterprint: Event;
170
+ /** 打印之前事件 */
88
171
  beforeprint: Event;
89
172
  }
90
173
  export type DOMUtils_PrintEventType = keyof DOMUtils_PrintEvent;
@@ -93,12 +176,19 @@ export type DOMUtils_PrintEventType = keyof DOMUtils_PrintEvent;
93
176
  * 拖动事件
94
177
  */
95
178
  export interface DOMUtils_DragEvent {
179
+ /** 拖动元素时触发事件 */
96
180
  drag: DragEvent;
181
+ /** 拖动结束事件 */
97
182
  dragend: DragEvent;
183
+ /** 拖动进入有效放置目标事件 */
98
184
  dragenter: DragEvent;
185
+ /** 拖动离开有效放置目标事件 */
99
186
  dragleave: DragEvent;
187
+ /** 拖动在有效放置目标上移动事件 */
100
188
  dragover: DragEvent;
189
+ /** 开始拖动元素事件 */
101
190
  dragstart: DragEvent;
191
+ /** 拖动元素被放置事件 */
102
192
  drop: DragEvent;
103
193
  }
104
194
  export type DOMUtils_DragEventType = keyof DOMUtils_DragEvent;
@@ -107,27 +197,49 @@ export type DOMUtils_DragEventType = keyof DOMUtils_DragEvent;
107
197
  * 多媒体(Media)事件
108
198
  */
109
199
  export interface DOMUtils_MediaEvent {
200
+ /** 音频/视频加载过程中被中断事件 */
110
201
  abort: Event;
202
+ /** 可以开始播放时触发事件 */
111
203
  canplay: Event;
204
+ /** 可以流畅播放到结尾时触发事件 */
112
205
  canplaythrough: Event;
206
+ /** 媒体时长发生变化事件 */
113
207
  durationchange: Event;
208
+ /** 媒体资源变为空时触发事件 */
114
209
  emptied: Event;
210
+ /** 媒体播放完毕事件 */
115
211
  ended: Event;
212
+ /** 加载媒体时发生错误事件 */
116
213
  error: Event;
214
+ /** 媒体第一帧加载完成事件 */
117
215
  loadeddata: Event;
216
+ /** 媒体元数据加载完成事件 */
118
217
  loadedmetadata: Event;
218
+ /** 开始寻找媒体文件时触发事件 */
119
219
  loadstart: Event;
220
+ /** 媒体暂停事件 */
120
221
  pause: Event;
222
+ /** 媒体开始播放事件 */
121
223
  play: Event;
224
+ /** 媒体实际开始播放事件 */
122
225
  playing: Event;
226
+ /** 浏览器正在获取媒体数据事件 */
123
227
  progress: Event;
228
+ /** 播放速度改变事件 */
124
229
  ratechange: Event;
230
+ /** 完成跳转到新位置事件 */
125
231
  seeked: Event;
232
+ /** 正在跳转到新位置事件 */
126
233
  seeking: Event;
234
+ /** 获取媒体数据异常缓慢事件 */
127
235
  stalled: Event;
236
+ /** 浏览器故意停止下载媒体事件 */
128
237
  suspend: Event;
238
+ /** 播放位置改变事件 */
129
239
  timeupdate: Event;
240
+ /** 音量改变事件 */
130
241
  volumechange: Event;
242
+ /** 等待数据时触发事件 */
131
243
  waiting: Event;
132
244
  }
133
245
  export type DOMUtils_MediaEventType = keyof DOMUtils_MediaEvent;
@@ -136,8 +248,11 @@ export type DOMUtils_MediaEventType = keyof DOMUtils_MediaEvent;
136
248
  * 动画事件
137
249
  */
138
250
  export interface DOMUtils_AnimationEvent {
251
+ /** CSS动画结束事件 */
139
252
  animationend: AnimationEvent;
253
+ /** CSS动画重复播放事件 */
140
254
  animationiteration: AnimationEvent;
255
+ /** CSS动画开始事件 */
141
256
  animationstart: AnimationEvent;
142
257
  }
143
258
  export type DOMUtils_AnimationEventType = keyof DOMUtils_AnimationEvent;
@@ -154,11 +269,17 @@ export type DOMUtils_TransitionEventType = keyof DOMUtils_TransitionEvent;
154
269
  * 触摸事件
155
270
  */
156
271
  export interface DOMUtils_TouchEvent {
272
+ /** 触摸开始事件 */
157
273
  touchstart: TouchEvent;
274
+ /** 触摸移动事件 */
158
275
  touchmove: TouchEvent;
276
+ /** 触摸结束事件 */
159
277
  touchend: TouchEvent;
278
+ /** 触摸被中断事件 */
160
279
  touchcancel: TouchEvent;
280
+ /** 触摸进入元素事件 */
161
281
  touchenter: TouchEvent;
282
+ /** 触摸离开元素事件 */
162
283
  touchleave: TouchEvent;
163
284
  }
164
285
  export type DOMUtils_TouchEventType = keyof DOMUtils_TouchEvent;
@@ -166,16 +287,27 @@ export type DOMUtils_TouchEventType = keyof DOMUtils_TouchEvent;
166
287
  * 其它事件
167
288
  */
168
289
  export interface DOMUtils_OtherEvent {
290
+ /** 接收到消息事件 */
169
291
  message: Event;
292
+ /** 浏览器上线事件 */
170
293
  online: Event;
294
+ /** 浏览器离线事件 */
171
295
  offline: Event;
296
+ /** 浏览器历史记录改变事件 */
172
297
  popstate: Event;
298
+ /** 上下文菜单显示事件 */
173
299
  show: Event;
300
+ /** Web Storage变化事件 */
174
301
  storage: Event;
302
+ /** details元素打开/关闭事件 */
175
303
  toggle: Event;
304
+ /** 鼠标滚轮滚动事件 */
176
305
  wheel: Event;
306
+ /** IE特有属性改变事件 */
177
307
  propertychange: Event;
308
+ /** 全屏状态改变事件 */
178
309
  fullscreenchange: Event;
310
+ /** DOM内容加载完成事件 */
179
311
  DOMContentLoaded: Event;
180
312
  }
181
313
  export type DOMUtils_OtherEventType = keyof DOMUtils_OtherEvent;
@@ -185,6 +317,7 @@ export type DOMUtils_OtherEventType = keyof DOMUtils_OtherEvent;
185
317
  */
186
318
  export declare type DOMUtils_Event = DOMUtils_MouseEvent &
187
319
  DOMUtils_KeyboardEvent &
320
+ DOMUtils_PointerEvent &
188
321
  DOMUtils_Frame_Object_Event &
189
322
  DOMUtils_FormEvent &
190
323
  DOMUtils_ClipboardEvent &
@@ -272,3 +405,16 @@ export declare interface DOMUtilsAddEventListenerResult {
272
405
  */
273
406
  emit(details?: object, useDispatchToEmit?: boolean): void;
274
407
  }
408
+
409
+ /**
410
+ * 传递的双击配置信息
411
+ */
412
+ export declare type DOMUtilsDoubleClickOption = {
413
+ /**
414
+ * 是否是双击
415
+ *
416
+ * + `true`:双击
417
+ * + `false`:单击
418
+ */
419
+ isDoubleClick: boolean;
420
+ };
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.8.0",
4
+ "version": "1.8.2",
5
5
  "type": "module",
6
6
  "description": "适合在浏览器中操作DOM的常用工具类",
7
7
  "main": "dist/index.cjs.js",
@@ -32,27 +32,27 @@
32
32
  "author": "WhiteSev",
33
33
  "license": "MIT",
34
34
  "dependencies": {
35
- "worker-timers": "^8.0.25"
35
+ "worker-timers": "^8.0.27"
36
36
  },
37
37
  "devDependencies": {
38
- "@eslint/js": "^9.39.1",
38
+ "@eslint/js": "^9.39.2",
39
39
  "@rollup/plugin-commonjs": "^29.0.0",
40
40
  "@rollup/plugin-json": "^6.1.0",
41
41
  "@rollup/plugin-node-resolve": "^16.0.3",
42
42
  "@rollup/plugin-terser": "^0.4.4",
43
43
  "@rollup/plugin-typescript": "^12.3.0",
44
- "browserslist": "^4.28.0",
45
- "caniuse-lite": "^1.0.30001757",
46
- "eslint": "^9.39.1",
44
+ "browserslist": "^4.28.1",
45
+ "caniuse-lite": "^1.0.30001761",
46
+ "eslint": "^9.39.2",
47
47
  "eslint-config-prettier": "^10.1.8",
48
48
  "eslint-plugin-compat": "^6.0.2",
49
49
  "eslint-plugin-prettier": "^5.5.4",
50
50
  "globals": "^16.5.0",
51
- "rollup": "^4.53.3",
51
+ "rollup": "^4.54.0",
52
52
  "rollup-plugin-clear": "^2.0.7",
53
53
  "tslib": "^2.8.1",
54
54
  "typescript": "^5.9.3",
55
- "typescript-eslint": "^8.48.0"
55
+ "typescript-eslint": "^8.50.0"
56
56
  },
57
57
  "scripts": {
58
58
  "lint": "eslint .",
@@ -6,6 +6,7 @@ import type {
6
6
  DOMUtils_Event,
7
7
  DOMUtils_EventType,
8
8
  DOMUtilsAddEventListenerResult,
9
+ DOMUtilsDoubleClickOption,
9
10
  DOMUtilsElementEventType,
10
11
  DOMUtilsEventListenerOption,
11
12
  DOMUtilsEventListenerOptionsAttribute,
@@ -1345,18 +1346,28 @@ class ElementEvent extends ElementAnimate {
1345
1346
  }
1346
1347
  /**
1347
1348
  * 双击监听,适配移动端
1349
+ * @param $el 监听的元素
1350
+ * @param handler 处理的回调函数
1351
+ * @param options 监听器的配置
1348
1352
  */
1349
1353
  onDoubleClick(
1350
1354
  $el: DOMUtilsTargetElementType,
1351
- handler: (event: MouseEvent | PointerEvent | TouchEvent) => void | Promise<void>,
1355
+ handler: (event: MouseEvent | PointerEvent | TouchEvent, option: DOMUtilsDoubleClickOption) => void | Promise<void>,
1352
1356
  options?: DOMUtilsEventListenerOption | boolean
1353
1357
  ): {
1354
1358
  off(): void;
1355
1359
  };
1360
+ /**
1361
+ * 双击监听,适配移动端
1362
+ * @param $el 监听的元素
1363
+ * @param selector 子元素选择器
1364
+ * @param handler 处理的回调函数
1365
+ * @param options 监听器的配置
1366
+ */
1356
1367
  onDoubleClick(
1357
1368
  $el: DOMUtilsTargetElementType,
1358
1369
  selector: string | string[] | undefined | null,
1359
- handler: (event: MouseEvent | PointerEvent | TouchEvent) => void | Promise<void>,
1370
+ handler: (event: MouseEvent | PointerEvent | TouchEvent, option: DOMUtilsDoubleClickOption) => void | Promise<void>,
1360
1371
  options?: DOMUtilsEventListenerOption | boolean
1361
1372
  ): {
1362
1373
  off(): void;
@@ -1366,7 +1377,10 @@ class ElementEvent extends ElementAnimate {
1366
1377
  } {
1367
1378
  const $el: DOMUtilsTargetElementType = args[0];
1368
1379
  let selector: string | string[] | undefined | null = void 0;
1369
- let handler: (event: MouseEvent | PointerEvent | TouchEvent) => void | Promise<void>;
1380
+ let handler: (
1381
+ event: MouseEvent | PointerEvent | TouchEvent,
1382
+ option: DOMUtilsDoubleClickOption
1383
+ ) => void | Promise<void>;
1370
1384
  let options: DOMUtilsEventListenerOption | boolean | undefined;
1371
1385
  if (args.length === 2) {
1372
1386
  if (typeof args[1] === "function") {
@@ -1395,34 +1409,52 @@ class ElementEvent extends ElementAnimate {
1395
1409
  let timer: number | undefined = void 0;
1396
1410
  /** 是否是移动端点击 */
1397
1411
  let isMobileTouch = false;
1412
+ /** 检测是否是单击的延迟时间 */
1413
+ const checkClickTime = 200;
1398
1414
 
1399
- const dblclick_handler = async (evt: MouseEvent | PointerEvent | TouchEvent) => {
1415
+ const dblclick_handler = async (evt: MouseEvent | PointerEvent | TouchEvent, option: DOMUtilsDoubleClickOption) => {
1400
1416
  if (evt.type === "dblclick" && isMobileTouch) {
1401
1417
  // 禁止在移动端触发dblclick事件
1402
1418
  return;
1403
1419
  }
1404
- await handler(evt);
1420
+ await handler(evt, option);
1405
1421
  };
1406
1422
 
1407
- const dblClickListener = this.on($el, "dblclick", dblclick_handler, options);
1423
+ const dblClickListener = this.on(
1424
+ $el,
1425
+ "dblclick",
1426
+ (evt) => {
1427
+ dblclick_handler(evt, {
1428
+ isDoubleClick: true,
1429
+ });
1430
+ },
1431
+ options
1432
+ );
1408
1433
  const touchEndListener = this.on(
1409
1434
  $el,
1410
- "touchend",
1435
+ "pointerup",
1411
1436
  selector,
1412
1437
  (evt, selectorTarget) => {
1413
- isMobileTouch = true;
1438
+ if (evt.pointerType === "touch") {
1439
+ isMobileTouch = true;
1440
+ }
1414
1441
  CommonUtils.clearTimeout(timer);
1415
1442
  timer = void 0;
1416
1443
  if (isDoubleClick && $click === selectorTarget) {
1417
1444
  isDoubleClick = false;
1418
1445
  $click = null;
1419
1446
  /* 判定为双击 */
1420
- dblclick_handler(evt);
1447
+ dblclick_handler(evt, {
1448
+ isDoubleClick: true,
1449
+ });
1421
1450
  } else {
1422
1451
  timer = CommonUtils.setTimeout(() => {
1423
1452
  isDoubleClick = false;
1424
1453
  // 判断为单击
1425
- }, 200);
1454
+ dblclick_handler(evt, {
1455
+ isDoubleClick: false,
1456
+ });
1457
+ }, checkClickTime);
1426
1458
  isDoubleClick = true;
1427
1459
  $click = selectorTarget;
1428
1460
  }