@whitesev/domutils 1.9.12 → 2.0.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/dist/index.umd.js CHANGED
@@ -4,7 +4,7 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.DOMUtils = factory());
5
5
  })(this, (function () { 'use strict';
6
6
 
7
- const version = "1.9.12";
7
+ const version = "2.0.0";
8
8
 
9
9
  class WindowApi {
10
10
  /** 默认的配置 */
@@ -1357,12 +1357,6 @@
1357
1357
  domEventSymbol: Symbol("events_" + (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)),
1358
1358
  };
1359
1359
 
1360
- const OriginPrototype = {
1361
- Object: {
1362
- defineProperty: Object.defineProperty,
1363
- },
1364
- };
1365
-
1366
1360
  class ElementEvent extends ElementAnimate {
1367
1361
  windowApi;
1368
1362
  constructor(windowApiOption) {
@@ -1462,6 +1456,9 @@
1462
1456
  listenerOption = getOption(args, 4, listenerOption);
1463
1457
  }
1464
1458
  $elList.forEach(($elItem) => {
1459
+ // window和document共用一个对象
1460
+ // 这样就能处理子元素选择器无法匹配的问题
1461
+ const targetIsWindow = CommonUtils.isWin($elItem);
1465
1462
  // 遍历事件名设置元素事件
1466
1463
  eventTypeList.forEach((eventName) => {
1467
1464
  /**
@@ -1496,12 +1493,7 @@
1496
1493
  else {
1497
1494
  $target = event.target;
1498
1495
  }
1499
- let $parent = $elItem;
1500
- if (CommonUtils.isWin($parent)) {
1501
- // window和document共用一个对象
1502
- // 这样就能处理子元素选择器无法匹配的问题
1503
- $parent = that.windowApi.document.documentElement;
1504
- }
1496
+ const $parent = targetIsWindow ? that.windowApi.document.documentElement : $elItem;
1505
1497
  const findValue = selectorList.find((selectors) => {
1506
1498
  // 判断目标元素是否匹配选择器
1507
1499
  if (that.matches($target, selectors)) {
@@ -1518,21 +1510,7 @@
1518
1510
  });
1519
1511
  if (findValue) {
1520
1512
  // 这里尝试使用defineProperty修改event的target值
1521
- const originTarget = event.target;
1522
- try {
1523
- OriginPrototype.Object.defineProperty(event, "target", {
1524
- get() {
1525
- return $target;
1526
- },
1527
- });
1528
- OriginPrototype.Object.defineProperty(event, "originTarget", {
1529
- get() {
1530
- return originTarget;
1531
- },
1532
- });
1533
- // oxlint-disable-next-line no-empty
1534
- }
1535
- catch { }
1513
+ // 不建议使用覆盖target,因为可能会有兼容性问题
1536
1514
  execCallback = true;
1537
1515
  call_this = $target;
1538
1516
  call_event = event;
@@ -1698,6 +1676,9 @@
1698
1676
  if (handlers.length === 0) {
1699
1677
  // 如果没有任意的handler,那么删除该属性
1700
1678
  CommonUtils.delete(elementEvents, eventType);
1679
+ if (Object.keys(elementEvents).length === 0) {
1680
+ CommonUtils.delete($elItem, GlobalData.domEventSymbol);
1681
+ }
1701
1682
  }
1702
1683
  });
1703
1684
  Reflect.set($elItem, GlobalData.domEventSymbol, elementEvents);
@@ -1732,11 +1713,11 @@
1732
1713
  }
1733
1714
  $elList.forEach(($elItem) => {
1734
1715
  const symbolList = [...new Set([...Object.getOwnPropertySymbols($elItem), GlobalData.domEventSymbol])];
1735
- symbolList.forEach((symbolItem) => {
1736
- if (!symbolItem.toString().startsWith("Symbol(events_")) {
1716
+ symbolList.forEach((__symbol__) => {
1717
+ if (!__symbol__.toString().startsWith("Symbol(events_")) {
1737
1718
  return;
1738
1719
  }
1739
- const elementEvents = Reflect.get($elItem, symbolItem) || {};
1720
+ const elementEvents = Reflect.get($elItem, __symbol__) || {};
1740
1721
  const iterEventNameList = eventTypeList.length ? eventTypeList : Object.keys(elementEvents);
1741
1722
  iterEventNameList.forEach((eventName) => {
1742
1723
  const handlers = elementEvents[eventName];
@@ -1748,8 +1729,11 @@
1748
1729
  capture: handler.option.capture,
1749
1730
  });
1750
1731
  }
1751
- const events = Reflect.get($elItem, symbolItem);
1732
+ const events = Reflect.get($elItem, __symbol__);
1752
1733
  CommonUtils.delete(events, eventName);
1734
+ if (Object.keys(events).length === 0) {
1735
+ CommonUtils.delete($elItem, __symbol__);
1736
+ }
1753
1737
  });
1754
1738
  });
1755
1739
  });
@@ -2376,7 +2360,7 @@
2376
2360
  },
2377
2361
  };
2378
2362
  }
2379
- onDoubleClick(...args) {
2363
+ onOneOrDouble(...args) {
2380
2364
  const $el = args[0];
2381
2365
  let selector = void 0;
2382
2366
  let handler;
@@ -2407,12 +2391,21 @@
2407
2391
  else {
2408
2392
  throw new Error("args length error");
2409
2393
  }
2410
- let clickMap = new WeakMap();
2411
- let isDoubleClick = false;
2394
+ let eventNodeMap = new WeakMap();
2395
+ let isDouble = false;
2412
2396
  let timer = void 0;
2397
+ let eventType = "pointerup";
2413
2398
  /** 检测是否是单击的延迟时间 */
2414
- const checkClickTime = 200;
2415
- const dblclick_handler = (evt, option, $selector) => {
2399
+ let checkClickTime = 200;
2400
+ if (typeof options === "object" && options != null) {
2401
+ if (typeof options.eventType === "string" || Array.isArray(options.eventType)) {
2402
+ eventType = options.eventType;
2403
+ }
2404
+ if (typeof options.checkClickTime === "number") {
2405
+ checkClickTime = options.checkClickTime;
2406
+ }
2407
+ }
2408
+ const callback = (evt, option, $selector) => {
2416
2409
  if ($selector) {
2417
2410
  return handler(evt, $selector, option);
2418
2411
  }
@@ -2420,35 +2413,34 @@
2420
2413
  return handler(evt, option);
2421
2414
  }
2422
2415
  };
2423
- const pointerUpListener = this.on($el, "pointerup", selector, (evt, $selector) => {
2424
- // this.preventEvent(evt);
2416
+ const pointerUpListener = this.on($el, eventType, selector, (evt, $selector) => {
2425
2417
  clearTimeout(timer);
2426
2418
  timer = void 0;
2427
- if (isDoubleClick && clickMap.has($selector)) {
2428
- isDoubleClick = false;
2429
- clickMap.delete($selector);
2430
- /* 判定为双击 */
2431
- dblclick_handler(evt, {
2419
+ if (isDouble && eventNodeMap.has($selector)) {
2420
+ isDouble = false;
2421
+ eventNodeMap.delete($selector);
2422
+ // 判定为双次
2423
+ callback(evt, {
2432
2424
  isDoubleClick: true,
2433
2425
  }, $selector);
2434
2426
  }
2435
2427
  else {
2436
2428
  timer = setTimeout(() => {
2437
- isDoubleClick = false;
2438
- // 判断为单击
2439
- dblclick_handler(evt, {
2429
+ isDouble = false;
2430
+ // 判断为单次
2431
+ callback(evt, {
2440
2432
  isDoubleClick: false,
2441
2433
  }, $selector);
2442
2434
  }, checkClickTime);
2443
- isDoubleClick = true;
2444
- clickMap.set($selector, evt);
2435
+ isDouble = true;
2436
+ eventNodeMap.set($selector, evt);
2445
2437
  }
2446
2438
  }, options);
2447
2439
  return {
2448
2440
  off() {
2449
2441
  pointerUpListener.off();
2450
2442
  // @ts-expect-error
2451
- clickMap = null;
2443
+ eventNodeMap = null;
2452
2444
  },
2453
2445
  };
2454
2446
  }