@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 +39 -30
- package/dist/index.amd.js.map +1 -1
- package/dist/index.amd.min.js +1 -1
- package/dist/index.amd.min.js.map +1 -1
- package/dist/index.cjs.js +39 -30
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.esm.js +39 -30
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/index.iife.js +39 -30
- package/dist/index.iife.js.map +1 -1
- package/dist/index.iife.min.js +1 -1
- package/dist/index.iife.min.js.map +1 -1
- package/dist/index.system.js +39 -30
- package/dist/index.system.js.map +1 -1
- package/dist/index.system.min.js +1 -1
- package/dist/index.system.min.js.map +1 -1
- package/dist/index.umd.js +39 -30
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/dist/types/src/ElementEvent.d.ts +51 -23
- package/dist/types/src/ElementSelector.d.ts +2 -2
- package/dist/types/src/types/DOMUtilsEvent.d.ts +3 -3
- package/dist/types/src/types/env.d.ts +1 -0
- package/package.json +1 -1
- package/src/ElementEvent.ts +96 -73
- package/src/ElementSelector.ts +8 -6
- package/src/index.ts +4 -1
- package/src/types/DOMUtilsEvent.d.ts +3 -3
- package/src/types/env.d.ts +1 -0
package/dist/index.amd.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
define((function () { 'use strict';
|
|
2
2
|
|
|
3
|
-
const version = "1.
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
1514
|
-
|
|
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
|
|
1531
|
-
* @param
|
|
1535
|
+
* @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
|
|
1536
|
+
* @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了$selector的没有值
|
|
1532
1537
|
*/
|
|
1533
|
-
emit: (
|
|
1534
|
-
that.emit($elList, eventTypeList,
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
1807
|
-
* @param
|
|
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,
|
|
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 (
|
|
1844
|
-
event =
|
|
1848
|
+
if (extraDetails && extraDetails instanceof Event) {
|
|
1849
|
+
event = extraDetails;
|
|
1845
1850
|
}
|
|
1846
1851
|
else {
|
|
1847
1852
|
// 构造事件
|
|
1848
1853
|
event = new Event(eventTypeItem);
|
|
1849
|
-
if (
|
|
1850
|
-
const detailKeys = Object.keys(
|
|
1854
|
+
if (typeof extraDetails === "object" && extraDetails != null) {
|
|
1855
|
+
const detailKeys = Object.keys(extraDetails);
|
|
1851
1856
|
detailKeys.forEach((keyName) => {
|
|
1852
|
-
const value = Reflect.get(
|
|
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 (
|
|
1863
|
+
if (useDispatchToTriggerEvent == false && eventTypeItem in elementEvents) {
|
|
1859
1864
|
// 直接调用监听的事件
|
|
1860
1865
|
elementEvents[eventTypeItem].forEach((eventsItem) => {
|
|
1861
|
-
eventsItem.
|
|
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,
|
|
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 ===
|
|
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 =
|
|
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
|
|