@whitesev/domutils 1.9.9 → 1.9.10
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 +68 -46
- 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 +68 -46
- 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 +68 -46
- 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 +68 -46
- 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 +68 -46
- 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 +68 -46
- 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 +2 -2
- package/dist/types/src/types/DOMUtilsEvent.d.ts +1 -0
- package/package.json +1 -1
- package/src/ElementEvent.ts +74 -49
- package/src/types/DOMUtilsEvent.d.ts +1 -0
package/dist/index.iife.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var DOMUtils = (function () {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const version = "1.9.
|
|
4
|
+
const version = "1.9.10";
|
|
5
5
|
|
|
6
6
|
class WindowApi {
|
|
7
7
|
/** 默认的配置 */
|
|
@@ -1381,7 +1381,7 @@ var DOMUtils = (function () {
|
|
|
1381
1381
|
* @param startIndex
|
|
1382
1382
|
* @param option
|
|
1383
1383
|
*/
|
|
1384
|
-
function
|
|
1384
|
+
const getOption = function (args, startIndex, option) {
|
|
1385
1385
|
const currentParam = args[startIndex];
|
|
1386
1386
|
if (typeof currentParam === "boolean") {
|
|
1387
1387
|
option.capture = currentParam;
|
|
@@ -1403,7 +1403,7 @@ var DOMUtils = (function () {
|
|
|
1403
1403
|
option.isComposedPath = currentParam.isComposedPath;
|
|
1404
1404
|
}
|
|
1405
1405
|
return option;
|
|
1406
|
-
}
|
|
1406
|
+
};
|
|
1407
1407
|
const that = this;
|
|
1408
1408
|
// eslint-disable-next-line prefer-rest-params
|
|
1409
1409
|
const args = arguments;
|
|
@@ -1461,39 +1461,52 @@ var DOMUtils = (function () {
|
|
|
1461
1461
|
/**
|
|
1462
1462
|
* 如果是once,那么删除该监听和元素上的事件和监听
|
|
1463
1463
|
*/
|
|
1464
|
-
const checkOptionOnceToRemoveEventListener = () => {
|
|
1464
|
+
const checkOptionOnceToRemoveEventListener = ($el) => {
|
|
1465
1465
|
if (listenerOption.once) {
|
|
1466
|
-
|
|
1466
|
+
this.off($el, eventTypeList, selector, callback, option);
|
|
1467
1467
|
}
|
|
1468
1468
|
};
|
|
1469
|
-
$elList.forEach((
|
|
1469
|
+
$elList.forEach(($elItem) => {
|
|
1470
1470
|
/**
|
|
1471
1471
|
* 事件回调
|
|
1472
1472
|
* @param event
|
|
1473
1473
|
*/
|
|
1474
1474
|
const handlerCallBack = function (event) {
|
|
1475
|
+
let call_this = void 0;
|
|
1476
|
+
let call_event = void 0;
|
|
1477
|
+
let call_$selector = void 0;
|
|
1478
|
+
let execCallback = false;
|
|
1475
1479
|
if (selectorList.length) {
|
|
1476
|
-
|
|
1480
|
+
// 存在子元素选择器
|
|
1477
1481
|
// 这时候的this和target都是子元素选择器的元素
|
|
1478
|
-
let
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
totalParent = that.windowApi.document.documentElement;
|
|
1482
|
+
let $target;
|
|
1483
|
+
if (listenerOption.isComposedPath) {
|
|
1484
|
+
// 可能为空
|
|
1485
|
+
const composedPath = event.composedPath();
|
|
1486
|
+
if (!composedPath.length && event.target) {
|
|
1487
|
+
composedPath.push(event.target);
|
|
1485
1488
|
}
|
|
1489
|
+
$target = composedPath[0];
|
|
1490
|
+
}
|
|
1491
|
+
else {
|
|
1492
|
+
$target = event.target;
|
|
1493
|
+
}
|
|
1494
|
+
let $parent = $elItem;
|
|
1495
|
+
if (CommonUtils.isWin($parent)) {
|
|
1496
|
+
// window和document共用一个对象
|
|
1497
|
+
// 这样就能处理子元素选择器无法匹配的问题
|
|
1498
|
+
$parent = that.windowApi.document.documentElement;
|
|
1486
1499
|
}
|
|
1487
|
-
const findValue = selectorList.find((
|
|
1500
|
+
const findValue = selectorList.find((selectors) => {
|
|
1488
1501
|
// 判断目标元素是否匹配选择器
|
|
1489
|
-
if (that.matches(
|
|
1490
|
-
|
|
1502
|
+
if (that.matches($target, selectors)) {
|
|
1503
|
+
// 当前目标可以被selector所匹配到
|
|
1491
1504
|
return true;
|
|
1492
1505
|
}
|
|
1493
|
-
|
|
1494
|
-
const $closestMatches = that.closest(
|
|
1495
|
-
if ($closestMatches &&
|
|
1496
|
-
|
|
1506
|
+
// 在上层与主元素之间寻找可以被selector所匹配到的
|
|
1507
|
+
const $closestMatches = that.closest($target, selectors);
|
|
1508
|
+
if ($closestMatches && $parent?.contains?.($closestMatches)) {
|
|
1509
|
+
$target = $closestMatches;
|
|
1497
1510
|
return true;
|
|
1498
1511
|
}
|
|
1499
1512
|
return false;
|
|
@@ -1503,29 +1516,38 @@ var DOMUtils = (function () {
|
|
|
1503
1516
|
try {
|
|
1504
1517
|
OriginPrototype.Object.defineProperty(event, "target", {
|
|
1505
1518
|
get() {
|
|
1506
|
-
return
|
|
1519
|
+
return $target;
|
|
1507
1520
|
},
|
|
1508
1521
|
});
|
|
1522
|
+
// oxlint-disable-next-line no-empty
|
|
1509
1523
|
}
|
|
1510
|
-
catch {
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1524
|
+
catch { }
|
|
1525
|
+
execCallback = true;
|
|
1526
|
+
call_this = $target;
|
|
1527
|
+
call_event = event;
|
|
1528
|
+
call_$selector = $target;
|
|
1515
1529
|
}
|
|
1516
1530
|
}
|
|
1517
1531
|
else {
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1532
|
+
execCallback = true;
|
|
1533
|
+
call_this = $elItem;
|
|
1534
|
+
call_event = event;
|
|
1535
|
+
}
|
|
1536
|
+
if (execCallback) {
|
|
1537
|
+
const result = listenerCallBack.call(call_this, call_event, call_$selector);
|
|
1538
|
+
checkOptionOnceToRemoveEventListener($elItem);
|
|
1539
|
+
if (typeof result === "boolean" && !result) {
|
|
1540
|
+
return false;
|
|
1541
|
+
}
|
|
1521
1542
|
}
|
|
1522
1543
|
};
|
|
1523
|
-
|
|
1544
|
+
// 遍历事件名设置元素事件
|
|
1524
1545
|
eventTypeList.forEach((eventName) => {
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1546
|
+
// add listener
|
|
1547
|
+
$elItem.addEventListener(eventName, handlerCallBack, listenerOption);
|
|
1548
|
+
// 获取对象上的事件
|
|
1549
|
+
const elementEvents = Reflect.get($elItem, GlobalData.domEventSymbol) || {};
|
|
1550
|
+
// 初始化对象上的xx事件
|
|
1529
1551
|
elementEvents[eventName] = elementEvents[eventName] || [];
|
|
1530
1552
|
elementEvents[eventName].push({
|
|
1531
1553
|
selector: selectorList,
|
|
@@ -1533,8 +1555,8 @@ var DOMUtils = (function () {
|
|
|
1533
1555
|
handlerCallBack: handlerCallBack,
|
|
1534
1556
|
callback: listenerCallBack,
|
|
1535
1557
|
});
|
|
1536
|
-
|
|
1537
|
-
Reflect.set(
|
|
1558
|
+
// 覆盖事件
|
|
1559
|
+
Reflect.set($elItem, GlobalData.domEventSymbol, elementEvents);
|
|
1538
1560
|
});
|
|
1539
1561
|
});
|
|
1540
1562
|
return {
|
|
@@ -1548,7 +1570,7 @@ var DOMUtils = (function () {
|
|
|
1548
1570
|
/**
|
|
1549
1571
|
* 主动触发事件
|
|
1550
1572
|
* @param extraDetails 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
|
|
1551
|
-
* @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback
|
|
1573
|
+
* @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true,如果为false,则直接调用callback,但是这种会让使用了`$selector`的没有值
|
|
1552
1574
|
*/
|
|
1553
1575
|
emit: (extraDetails, useDispatchToTriggerEvent) => {
|
|
1554
1576
|
that.emit($elList, eventTypeList, extraDetails, useDispatchToTriggerEvent);
|
|
@@ -1562,7 +1584,7 @@ var DOMUtils = (function () {
|
|
|
1562
1584
|
* @param startIndex
|
|
1563
1585
|
* @param option
|
|
1564
1586
|
*/
|
|
1565
|
-
function
|
|
1587
|
+
const getOption = function (args1, startIndex, option) {
|
|
1566
1588
|
const currentParam = args1[startIndex];
|
|
1567
1589
|
if (typeof currentParam === "boolean") {
|
|
1568
1590
|
option.capture = currentParam;
|
|
@@ -1571,7 +1593,7 @@ var DOMUtils = (function () {
|
|
|
1571
1593
|
option.capture = currentParam.capture;
|
|
1572
1594
|
}
|
|
1573
1595
|
return option;
|
|
1574
|
-
}
|
|
1596
|
+
};
|
|
1575
1597
|
const that = this;
|
|
1576
1598
|
// eslint-disable-next-line prefer-rest-params
|
|
1577
1599
|
const args = arguments;
|
|
@@ -1629,7 +1651,7 @@ var DOMUtils = (function () {
|
|
|
1629
1651
|
filter = option;
|
|
1630
1652
|
}
|
|
1631
1653
|
$elList.forEach(($elItem) => {
|
|
1632
|
-
|
|
1654
|
+
// 获取对象上的事件
|
|
1633
1655
|
const elementEvents = Reflect.get($elItem, GlobalData.domEventSymbol) || {};
|
|
1634
1656
|
eventTypeList.forEach((eventName) => {
|
|
1635
1657
|
const handlers = elementEvents[eventName] || [];
|
|
@@ -1662,7 +1684,7 @@ var DOMUtils = (function () {
|
|
|
1662
1684
|
}
|
|
1663
1685
|
}
|
|
1664
1686
|
if (handlers.length === 0) {
|
|
1665
|
-
|
|
1687
|
+
// 如果没有任意的handler,那么删除该属性
|
|
1666
1688
|
CommonUtils.delete(elementEvents, eventType);
|
|
1667
1689
|
}
|
|
1668
1690
|
});
|
|
@@ -2423,11 +2445,11 @@ var DOMUtils = (function () {
|
|
|
2423
2445
|
* 阻止事件的默认行为发生,并阻止事件传播
|
|
2424
2446
|
*/
|
|
2425
2447
|
const stopEvent = (event, onlyStopPropagation) => {
|
|
2448
|
+
// 停止事件的传播,阻止它继续向更上层的元素冒泡,事件将不会再传播给其他的元素
|
|
2449
|
+
event?.stopPropagation();
|
|
2450
|
+
// 阻止事件传播,并且还能阻止元素上的其他事件处理程序被触发
|
|
2451
|
+
event?.stopImmediatePropagation();
|
|
2426
2452
|
if (typeof onlyStopPropagation === "boolean" && onlyStopPropagation) {
|
|
2427
|
-
// 停止事件的传播,阻止它继续向更上层的元素冒泡,事件将不会再传播给其他的元素
|
|
2428
|
-
event?.stopPropagation();
|
|
2429
|
-
// 阻止事件传播,并且还能阻止元素上的其他事件处理程序被触发
|
|
2430
|
-
event?.stopImmediatePropagation();
|
|
2431
2453
|
return;
|
|
2432
2454
|
}
|
|
2433
2455
|
// 阻止事件的默认行为发生。例如,当点击一个链接时,浏览器会默认打开链接的URL,或者在输入框内输入文字
|