@whitesev/domutils 1.8.9 → 1.9.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.amd.js CHANGED
@@ -1,6 +1,6 @@
1
1
  define((function () { 'use strict';
2
2
 
3
- const version = "1.8.9";
3
+ const version = "1.9.0";
4
4
 
5
5
  class WindowApi {
6
6
  /** 默认的配置 */
@@ -311,9 +311,10 @@ define((function () { 'use strict';
311
311
  */
312
312
  matches($el, selector) {
313
313
  selector = selector.trim();
314
- if ($el == null) {
314
+ if ($el == null)
315
+ return false;
316
+ if ($el instanceof Document)
315
317
  return false;
316
- }
317
318
  if (selector.match(/[^\s]{1}:empty$/gi)) {
318
319
  // empty 语法
319
320
  selector = selector.replace(/:empty$/gi, "");
@@ -357,6 +358,10 @@ define((function () { 'use strict';
357
358
  }
358
359
  closest($el, selector) {
359
360
  selector = selector.trim();
361
+ if ($el == null)
362
+ return null;
363
+ if ($el instanceof Document)
364
+ return null;
360
365
  if (selector.match(/[^\s]{1}:empty$/gi)) {
361
366
  // empty 语法
362
367
  selector = selector.replace(/:empty$/gi, "");
@@ -1441,17 +1446,17 @@ define((function () { 'use strict';
1441
1446
  /**
1442
1447
  * 如果是once,那么删除该监听和元素上的事件和监听
1443
1448
  */
1444
- function checkOptionOnceToRemoveEventListener() {
1449
+ const checkOptionOnceToRemoveEventListener = () => {
1445
1450
  if (listenerOption.once) {
1446
1451
  that.off(element, eventType, selector, callback, option);
1447
1452
  }
1448
- }
1453
+ };
1449
1454
  $elList.forEach((elementItem) => {
1450
1455
  /**
1451
1456
  * 事件回调
1452
1457
  * @param event
1453
1458
  */
1454
- function domUtilsEventCallBack(event) {
1459
+ const handlerCallBack = function (event) {
1455
1460
  if (selectorList.length) {
1456
1461
  /* 存在子元素选择器 */
1457
1462
  // 这时候的this和target都是子元素选择器的元素
@@ -1499,10 +1504,10 @@ define((function () { 'use strict';
1499
1504
  listenerCallBack.call(elementItem, event);
1500
1505
  checkOptionOnceToRemoveEventListener();
1501
1506
  }
1502
- }
1507
+ };
1503
1508
  /* 遍历事件名设置元素事件 */
1504
1509
  eventTypeList.forEach((eventName) => {
1505
- elementItem.addEventListener(eventName, domUtilsEventCallBack, listenerOption);
1510
+ elementItem.addEventListener(eventName, handlerCallBack, listenerOption);
1506
1511
  /* 获取对象上的事件 */
1507
1512
  const elementEvents = Reflect.get(elementItem, GlobalData.domEventSymbol) || {};
1508
1513
  /* 初始化对象上的xx事件 */
@@ -1510,8 +1515,8 @@ define((function () { 'use strict';
1510
1515
  elementEvents[eventName].push({
1511
1516
  selector: selectorList,
1512
1517
  option: listenerOption,
1513
- callback: domUtilsEventCallBack,
1514
- originCallBack: listenerCallBack,
1518
+ handlerCallBack: handlerCallBack,
1519
+ callback: listenerCallBack,
1515
1520
  });
1516
1521
  /* 覆盖事件 */
1517
1522
  Reflect.set(elementItem, GlobalData.domEventSymbol, elementEvents);
@@ -1527,11 +1532,11 @@ define((function () { 'use strict';
1527
1532
  },
1528
1533
  /**
1529
1534
  * 主动触发事件
1530
- * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
1531
- * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
1535
+ * @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
1536
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了$selector的没有值
1532
1537
  */
1533
- emit: (details, useDispatchToEmit) => {
1534
- that.emit($elList, eventTypeList, details, useDispatchToEmit);
1538
+ emit: (extraDetails, useDispatchToTriggerEvent) => {
1539
+ that.emit($elList, eventTypeList, extraDetails, useDispatchToTriggerEvent);
1535
1540
  },
1536
1541
  };
1537
1542
  }
@@ -1627,7 +1632,7 @@ define((function () { 'use strict';
1627
1632
  for (let index = 0; index < filterHandler.length; index++) {
1628
1633
  const handler = filterHandler[index];
1629
1634
  let flag = true;
1630
- if (flag && listenerCallBack && handler.originCallBack !== listenerCallBack) {
1635
+ if (flag && listenerCallBack && handler.callback !== listenerCallBack) {
1631
1636
  // callback不同
1632
1637
  flag = false;
1633
1638
  }
@@ -1644,7 +1649,7 @@ define((function () { 'use strict';
1644
1649
  flag = false;
1645
1650
  }
1646
1651
  if (flag || isRemoveAll) {
1647
- $elItem.removeEventListener(eventName, handler.callback, handler.option);
1652
+ $elItem.removeEventListener(eventName, handler.handlerCallBack, handler.option);
1648
1653
  const findIndex = handlers.findIndex((item) => item === handler);
1649
1654
  if (findIndex !== -1) {
1650
1655
  handlers.splice(findIndex, 1);
@@ -1700,7 +1705,7 @@ define((function () { 'use strict';
1700
1705
  return;
1701
1706
  }
1702
1707
  for (const handler of handlers) {
1703
- $elItem.removeEventListener(eventName, handler.callback, {
1708
+ $elItem.removeEventListener(eventName, handler.handlerCallBack, {
1704
1709
  capture: handler["option"]["capture"],
1705
1710
  });
1706
1711
  }
@@ -1803,8 +1808,8 @@ define((function () { 'use strict';
1803
1808
  * 主动触发事件
1804
1809
  * @param element 需要触发的元素|元素数组|window
1805
1810
  * @param eventType 需要触发的事件
1806
- * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
1807
- * @param useDispatchToEmit 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了selectorTarget的没有值
1811
+ * @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
1812
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用通过.on监听的callback(),但是这种只有一个入参,如果使用$selector则没有值
1808
1813
  * @example
1809
1814
  * // 触发元素a.xx的click事件
1810
1815
  * DOMUtils.emit(document.querySelector("a.xx"),"click")
@@ -1813,7 +1818,7 @@ define((function () { 'use strict';
1813
1818
  * DOMUtils.emit(document.querySelector("a.xx"),"click tap hover")
1814
1819
  * DOMUtils.emit("a.xx",["click","tap","hover"])
1815
1820
  */
1816
- emit(element, eventType, details, useDispatchToEmit = true) {
1821
+ emit(element, eventType, extraDetails, useDispatchToTriggerEvent = true) {
1817
1822
  const that = this;
1818
1823
  if (typeof element === "string") {
1819
1824
  element = that.selectorAll(element);
@@ -1840,25 +1845,25 @@ define((function () { 'use strict';
1840
1845
  const elementEvents = Reflect.get($elItem, GlobalData.domEventSymbol) || {};
1841
1846
  eventTypeList.forEach((eventTypeItem) => {
1842
1847
  let event = null;
1843
- if (details && details instanceof Event) {
1844
- event = details;
1848
+ if (extraDetails && extraDetails instanceof Event) {
1849
+ event = extraDetails;
1845
1850
  }
1846
1851
  else {
1847
1852
  // 构造事件
1848
1853
  event = new Event(eventTypeItem);
1849
- if (details) {
1850
- const detailKeys = Object.keys(details);
1854
+ if (typeof extraDetails === "object" && extraDetails != null) {
1855
+ const detailKeys = Object.keys(extraDetails);
1851
1856
  detailKeys.forEach((keyName) => {
1852
- const value = Reflect.get(details, keyName);
1857
+ const value = Reflect.get(extraDetails, keyName);
1853
1858
  // 在event上添加属性
1854
1859
  Reflect.set(event, keyName, value);
1855
1860
  });
1856
1861
  }
1857
1862
  }
1858
- if (useDispatchToEmit == false && eventTypeItem in elementEvents) {
1863
+ if (useDispatchToTriggerEvent == false && eventTypeItem in elementEvents) {
1859
1864
  // 直接调用监听的事件
1860
1865
  elementEvents[eventTypeItem].forEach((eventsItem) => {
1861
- eventsItem.callback(event);
1866
+ eventsItem.handlerCallBack(event);
1862
1867
  });
1863
1868
  }
1864
1869
  else {
@@ -2344,14 +2349,14 @@ define((function () { 'use strict';
2344
2349
  isDoubleClick: true,
2345
2350
  });
2346
2351
  }, options);
2347
- const touchEndListener = this.on($el, "pointerup", selector, (evt, selectorTarget) => {
2352
+ const touchEndListener = this.on($el, "pointerup", selector, (evt, $selector) => {
2348
2353
  this.preventEvent(evt);
2349
2354
  if (evt.pointerType === "touch") {
2350
2355
  isMobileTouch = true;
2351
2356
  }
2352
2357
  clearTimeout(timer);
2353
2358
  timer = void 0;
2354
- if (isDoubleClick && $click === selectorTarget) {
2359
+ if (isDoubleClick && $click === $selector) {
2355
2360
  isDoubleClick = false;
2356
2361
  $click = null;
2357
2362
  /* 判定为双击 */
@@ -2368,7 +2373,7 @@ define((function () { 'use strict';
2368
2373
  });
2369
2374
  }, checkClickTime);
2370
2375
  isDoubleClick = true;
2371
- $click = selectorTarget;
2376
+ $click = $selector;
2372
2377
  }
2373
2378
  }, options);
2374
2379
  return {
@@ -3915,6 +3920,10 @@ define((function () { 'use strict';
3915
3920
  }
3916
3921
  }
3917
3922
  const domUtils = new DOMUtils();
3923
+ domUtils.emit(document, "test");
3924
+ domUtils.emit(document, "click");
3925
+ domUtils.emit(document, ["test", "click"]);
3926
+ domUtils.emit(document, ["test", "click"], true);
3918
3927
 
3919
3928
  return domUtils;
3920
3929