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