@alicloud/dom-event-hijacker
Version:
DOM 事件拦截,类似于 jQuery 的 delegate
33 lines (32 loc) • 961 B
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = handleClickHijacker;
var _const = require("../const");
/**
* 处理一个 hijacker 对象
*/
function handleClickHijacker(el, e, hijacker) {
if (el.hasAttribute(_const.DATA_CLICK_HIJACK_IGNORE)) {
return false;
}
var condition = hijacker.condition,
callback = hijacker.callback,
shouldPreventDefault = hijacker.shouldPreventDefault,
shouldStopPropagation = hijacker.shouldStopPropagation;
var result = condition(el);
if (!result) {
return false;
}
callback === null || callback === void 0 ? void 0 : callback(el, result);
if (typeof shouldPreventDefault === 'boolean' ? shouldPreventDefault : el.tagName === 'A') {
// 不传 shouldPreventDefault,则默认仅对链接阻止默认行为
e.preventDefault();
}
if (shouldStopPropagation) {
// 默认不阻止冒泡
e.stopPropagation();
}
return true;
}