自定义事件
2025年1月10日大约 1 分钟
事件构造器
内建事件类形成一个层次结构,类似于 DOM 元素类。根是内建的 Event 类
内建事件(
click)和自定义事件的冒泡机制相同,自定义事件也有捕获阶段和冒泡阶段
let event = new Event(type[, options])type:事件类型,可以是像这样
click的字符串,或者我们自己的像这样my-event的参数options:具有两个可选属性的对象
bubbles:如果为true,那么事件会冒泡cancelable:如果为true,那么默认行为就会被阻止
dispatchEvent
在元素上调用自定义事件
let event = new Event("click");
elem.dispatchEvent(event);event.isTrusted
区分“真实”用户事件和通过脚本生成的事件
来自真实用户操作的事件,
event.isTrusted属性为true脚本生成的事件,
event.isTrusted属性为false
标准构造器
正确的构造器允许为该类型的事件指定标准属性,通用的
Event构造器不允许这样做
UIEventFocusEventMouseEventWheelEventKeyboardEvent
// 标准构造器
let event = new MouseEvent("click", {
  bubbles: true,
  cancelable: true,
  clientX: 100,
  clientY: 100
});
alert(event.clientX); // 100
// 通用 Event
let event = new Event("click", {
  bubbles: true, // 构造器 Event 中只有 bubbles 和 cancelable 可以工作
  cancelable: true,
  clientX: 100,
  clientY: 100
});
alert(event.clientX); // undefined,未知的属性被忽略了!自定义事件
和
Event一样。除了一点不同,在第二个参数(对象)中,可以为想要与事件一起传递的任何自定义信息添加一个附加的属性detail
<h1 id="elem">Hello for John!</h1>
<script>
  // 事件附带给处理程序的其他详细信息
  elem.addEventListener("hello", function(event) {
    alert(event.detail.name);
  });
  elem.dispatchEvent(new CustomEvent("hello", {
    detail: { name: "John" }
  }));
</script>