事件流:
首先经过事件捕获阶段,从上往下传,再经历冒泡阶段,从下往上传。

自定义事件:
首先通过CustomEvent()构造函数创建一个对象
let myEvent =new CustomEvent(typeArgs,eventInit);
其中typeArgs:DoOMString类型,表示事件的名称
eventInit:可选配置项,其中有
1、detail表示该事件中需要被传递的数据,在EventListener中获取 可选any类型
2、bubble表示该事件是否是冒泡 类型 Boolean
3、cancelable表示该事件能否被取消 类型 Boolean
实例:
let myEvent = new CustomEvent("自定义事件名",{
detail:{name:"heng"}//放置需要传递的数据
})

2、//给页面的元素或者是Window对象添加监听事件
window.addEventListener("任意名字",(e)=>{
alert('事件发生,${e.detail.name}'触发)
})
给元素绑定分发事件
document.getElementById("选择器").addEventListener('click',function(){
window.dispatchEvent(myEvent)
})

Event() 与CustomEvent()区别:
从传参数方面讲,Event()适合创建简单的自定义事件,而CoustomeEvent()支持传参的自定事件
并且在EventListener获取detail的数据信息。