@whitesev/domutils 1.9.12 → 2.0.1

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