• 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等 

  • 相关阅读:
    ChatGPT成知名度最高生成式AI产品,使用频率却不高
    C语言实现json文本解析
    低代码应用开发适用于边缘吗?
    react源码中的hooks
    thunderbird 首次打开配置文件信息:
    早在多久MySQL 啥时候用表锁,啥时候用行锁?
    Notion 中文:客户端、网页端汉化方案
    开发中避免延时操作技巧详解
    java8-Stream流常用API
    WEB安全基础 - - -Tomcat弱口令漏洞
  • 原文地址:https://blog.csdn.net/weixin_43845059/article/details/132853384