@alicloud/dom-event-hijacker
Version:
DOM 事件拦截,类似于 jQuery 的 delegate
28 lines (27 loc) • 870 B
JavaScript
import { DATA_CLICK_HIJACK_IGNORE } from '../const';
/**
* 处理一个 hijacker 对象
*/
export default function handleClickHijacker(el, e, hijacker) {
if (el.hasAttribute(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;
}