• js dispatchEvent派发自定义事件


    低版本IE浏览器不兼容

    dispatchEvent使用

    在标准浏览器提供了元素触发自定义事件的方法 element.dispatchEvent(),就是说,我们可以不用在DOM上点击按钮触发事件,在代码里通过 dispatchEvent()就能触发事件。如下:

    1. <body>
    2. <div class="box">div>
    3. body>
    4. <script>
    5. let box = document.querySelector(".box");
    6. box.addEventListener("click", function(e) {
    7. console.log(e, "我被点击了")
    8. })
    9. let event = new Event("click");
    10. box.dispatchEvent(event)
    11. script>

    dispatchEvent()触发 控制台打印

    我们点击box打印

    我们可以看到 isTrusted 这个属性如果是代码触发 是false,如果是用户自己就是true,从这个属性我们可以判断这个事件是否是用户触发。 

    dispatchEvent派发自定义事件

    一般情况我们使用dispatchEvent派发自定义事件的流程是:

    创建(createEvent)=>初始化(initEvent)=》派发(dispatchEvent)

    代码如下:

    1. body>
    2. <div class="box">div>
    3. body>
    4. <script>
    5. let box = document.querySelector(".box");
    6. let event = document.createEvent("Event")
    7. // 定义事件名称
    8. event.initEvent("dong", true, true);
    9. // 监听事件
    10. box.addEventListener("dong", function(e) {
    11. console.log(e, "看到我了吗")
    12. })
    13. document.addEventListener("dong", function(e) {
    14. console.log(e, "看到我了吗")
    15. })
    16. box.onclick = function() {
    17. // 派发事件
    18. box.dispatchEvent(event);
    19. }
    20. script>

    我们定义了 dong 事件 ,然后监听事件, 通过用户点击去派发事件,这样 监听 dong 的这个事件就会接受到消息。

    CustomEvent

    CustomEvent 可以创建一个更具体的自定义事件,并且可以携带额外的参数.

    new CustomEvent (eventname, options)

    其中options可以是

    1. {
    2. detail: {
    3. ...
    4. },//键名必须是detail
    5. bubbles: true, //是否冒泡
    6. cancelable: false //是否取消默认事件
    7. }

    例子:

    1. <body>
    2. <div class="box">div>
    3. body>
    4. <script>
    5. let box = document.querySelector(".box");
    6. let event = document.createEvent("Event")
    7. // 监听事件
    8. box.addEventListener("dong", function(e) {
    9. console.log(e.detail, "看到我了吗")
    10. })
    11. let i = 0
    12. setInterval(() => {
    13. i++
    14. let event = new CustomEvent("dong", {
    15. detail: i
    16. })
    17. // 派发事件
    18. box.dispatchEvent(event);
    19. }, 1000);
    20. script>

    控制台打印

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

  • 相关阅读:
    外包干了2年,彻底废了...
    DHTMLX Diagram JavaScript/HTML5 Pro Library:5.0
    数据字典中的三种类型数据表
    0基础学习区块链技术——入门
    Qt5开发从入门到精通——第九篇四节( Qt5 文件及磁盘处理—— 文件系统浏览)
    没有root权限如何通过apt安装deb软件
    Zookeeper & Kafka 开启安全认证的配置
    【强化学习】05 —— 基于无模型的强化学习(Prediction)
    微服务使用SockJs+Stomp实现Websocket 前后端实例 | Vuex形式断开重连、跨域等等问题踩坑(一)
    倍增lca
  • 原文地址:https://blog.csdn.net/weixin_43845059/article/details/132853384