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