低版本IE浏览器不兼容
在标准浏览器提供了元素触发自定义事件的方法 element.dispatchEvent(),就是说,我们可以不用在DOM上点击按钮触发事件,在代码里通过 dispatchEvent()就能触发事件。如下:
- <body>
-
- <div class="box">div>
- body>
-
- <script>
- let box = document.querySelector(".box");
-
- box.addEventListener("click", function(e) {
- console.log(e, "我被点击了")
- })
-
- let event = new Event("click");
- box.dispatchEvent(event)
- script>
dispatchEvent()触发 控制台打印

我们点击box打印

我们可以看到 isTrusted 这个属性如果是代码触发 是false,如果是用户自己就是true,从这个属性我们可以判断这个事件是否是用户触发。
一般情况我们使用dispatchEvent派发自定义事件的流程是:
创建(createEvent)=>初始化(initEvent)=》派发(dispatchEvent)
代码如下:
- body>
-
- <div class="box">div>
- body>
-
- <script>
- let box = document.querySelector(".box");
-
- let event = document.createEvent("Event")
-
- // 定义事件名称
- event.initEvent("dong", true, true);
-
- // 监听事件
- box.addEventListener("dong", function(e) {
- console.log(e, "看到我了吗")
- })
- document.addEventListener("dong", function(e) {
- console.log(e, "看到我了吗")
- })
-
- box.onclick = function() {
- // 派发事件
- box.dispatchEvent(event);
- }
- script>
我们定义了 dong 事件 ,然后监听事件, 通过用户点击去派发事件,这样 监听 dong 的这个事件就会接受到消息。
CustomEvent 可以创建一个更具体的自定义事件,并且可以携带额外的参数.
new CustomEvent (eventname, options)
其中options可以是
- {
- detail: {
- ...
- },//键名必须是detail
- bubbles: true, //是否冒泡
- cancelable: false //是否取消默认事件
- }
例子:
- <body>
-
- <div class="box">div>
- body>
-
- <script>
- let box = document.querySelector(".box");
-
- let event = document.createEvent("Event")
-
- // 监听事件
- box.addEventListener("dong", function(e) {
- console.log(e.detail, "看到我了吗")
- })
-
- let i = 0
- setInterval(() => {
- i++
- let event = new CustomEvent("dong", {
- detail: i
- })
- // 派发事件
- box.dispatchEvent(event);
- }, 1000);
- script>
控制台打印

使用这个方法我们可以监听一些不是由用户触犯的事件或者方法, 如socket等