@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.
@@ -1,7 +1,7 @@
1
1
  var DOMUtils = (function () {
2
2
  'use strict';
3
3
 
4
- const version = "1.9.11";
4
+ const version = "2.0.0";
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,15 +1507,7 @@ var DOMUtils = (function () {
1515
1507
  });
1516
1508
  if (findValue) {
1517
1509
  // 这里尝试使用defineProperty修改event的target值
1518
- try {
1519
- OriginPrototype.Object.defineProperty(event, "target", {
1520
- get() {
1521
- return $target;
1522
- },
1523
- });
1524
- // oxlint-disable-next-line no-empty
1525
- }
1526
- catch { }
1510
+ // 不建议使用覆盖target,因为可能会有兼容性问题
1527
1511
  execCallback = true;
1528
1512
  call_this = $target;
1529
1513
  call_event = event;
@@ -1689,6 +1673,9 @@ var DOMUtils = (function () {
1689
1673
  if (handlers.length === 0) {
1690
1674
  // 如果没有任意的handler,那么删除该属性
1691
1675
  CommonUtils.delete(elementEvents, eventType);
1676
+ if (Object.keys(elementEvents).length === 0) {
1677
+ CommonUtils.delete($elItem, GlobalData.domEventSymbol);
1678
+ }
1692
1679
  }
1693
1680
  });
1694
1681
  Reflect.set($elItem, GlobalData.domEventSymbol, elementEvents);
@@ -1723,11 +1710,11 @@ var DOMUtils = (function () {
1723
1710
  }
1724
1711
  $elList.forEach(($elItem) => {
1725
1712
  const symbolList = [...new Set([...Object.getOwnPropertySymbols($elItem), GlobalData.domEventSymbol])];
1726
- symbolList.forEach((symbolItem) => {
1727
- if (!symbolItem.toString().startsWith("Symbol(events_")) {
1713
+ symbolList.forEach((__symbol__) => {
1714
+ if (!__symbol__.toString().startsWith("Symbol(events_")) {
1728
1715
  return;
1729
1716
  }
1730
- const elementEvents = Reflect.get($elItem, symbolItem) || {};
1717
+ const elementEvents = Reflect.get($elItem, __symbol__) || {};
1731
1718
  const iterEventNameList = eventTypeList.length ? eventTypeList : Object.keys(elementEvents);
1732
1719
  iterEventNameList.forEach((eventName) => {
1733
1720
  const handlers = elementEvents[eventName];
@@ -1739,8 +1726,11 @@ var DOMUtils = (function () {
1739
1726
  capture: handler.option.capture,
1740
1727
  });
1741
1728
  }
1742
- const events = Reflect.get($elItem, symbolItem);
1729
+ const events = Reflect.get($elItem, __symbol__);
1743
1730
  CommonUtils.delete(events, eventName);
1731
+ if (Object.keys(events).length === 0) {
1732
+ CommonUtils.delete($elItem, __symbol__);
1733
+ }
1744
1734
  });
1745
1735
  });
1746
1736
  });
@@ -2367,7 +2357,7 @@ var DOMUtils = (function () {
2367
2357
  },
2368
2358
  };
2369
2359
  }
2370
- onDoubleClick(...args) {
2360
+ onOneOrDouble(...args) {
2371
2361
  const $el = args[0];
2372
2362
  let selector = void 0;
2373
2363
  let handler;
@@ -2398,12 +2388,21 @@ var DOMUtils = (function () {
2398
2388
  else {
2399
2389
  throw new Error("args length error");
2400
2390
  }
2401
- let clickMap = new WeakMap();
2402
- let isDoubleClick = false;
2391
+ let eventNodeMap = new WeakMap();
2392
+ let isDouble = false;
2403
2393
  let timer = void 0;
2394
+ let eventType = "pointerup";
2404
2395
  /** 检测是否是单击的延迟时间 */
2405
- const checkClickTime = 200;
2406
- 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) => {
2407
2406
  if ($selector) {
2408
2407
  return handler(evt, $selector, option);
2409
2408
  }
@@ -2411,35 +2410,34 @@ var DOMUtils = (function () {
2411
2410
  return handler(evt, option);
2412
2411
  }
2413
2412
  };
2414
- const pointerUpListener = this.on($el, "pointerup", selector, (evt, $selector) => {
2415
- // this.preventEvent(evt);
2413
+ const pointerUpListener = this.on($el, eventType, selector, (evt, $selector) => {
2416
2414
  clearTimeout(timer);
2417
2415
  timer = void 0;
2418
- if (isDoubleClick && clickMap.has($selector)) {
2419
- isDoubleClick = false;
2420
- clickMap.delete($selector);
2421
- /* 判定为双击 */
2422
- dblclick_handler(evt, {
2416
+ if (isDouble && eventNodeMap.has($selector)) {
2417
+ isDouble = false;
2418
+ eventNodeMap.delete($selector);
2419
+ // 判定为双次
2420
+ callback(evt, {
2423
2421
  isDoubleClick: true,
2424
2422
  }, $selector);
2425
2423
  }
2426
2424
  else {
2427
2425
  timer = setTimeout(() => {
2428
- isDoubleClick = false;
2429
- // 判断为单击
2430
- dblclick_handler(evt, {
2426
+ isDouble = false;
2427
+ // 判断为单次
2428
+ callback(evt, {
2431
2429
  isDoubleClick: false,
2432
2430
  }, $selector);
2433
2431
  }, checkClickTime);
2434
- isDoubleClick = true;
2435
- clickMap.set($selector, evt);
2432
+ isDouble = true;
2433
+ eventNodeMap.set($selector, evt);
2436
2434
  }
2437
2435
  }, options);
2438
2436
  return {
2439
2437
  off() {
2440
2438
  pointerUpListener.off();
2441
2439
  // @ts-expect-error
2442
- clickMap = null;
2440
+ eventNodeMap = null;
2443
2441
  },
2444
2442
  };
2445
2443
  }