美文网首页web前端技术分享
js 自定义事件与触发

js 自定义事件与触发

作者: 阿巳交不起水电费 | 来源:发表于2024-09-13 15:36 被阅读0次

通常是用户与页面进行交互的时候触发事件,比如点击某个元素触发click事件,鼠标移入移出触发mouse相关事件等,但是有的时候我们在写代码的时候需要手动触发某个事件,这可以是浏览器自带的事件也可以是我们自定义的事件。

1.手动触发某个事件

使用 EventTarget.dispatchEvent()
语法:

dispatchEvent(event)

具体用法看下面的demo,后面会用到。

2.如何声明一个事件

注意这个事件可以是浏览器现有的,比如click,resize等,也可以是任意名称

方式一:new Event(type, options)

这种方式可以设置事件是否冒泡


image.png

方式二:new CustomEvent(type, options)

这种方式可以给事件带其他参数


image.png

方式三:createEvent + initEvent 注意:已经废弃!

注意:这种方式不再推荐,有的博客有提到这种方式。


image.png
image.png
// 创建事件
const event = document.createEvent("Event");

// 定义事件名称为 'build'。
event.initEvent("build", true, true);

// 监听事件。
elem.addEventListener(
  "build",
  (e) => {
    // e.target 与元素匹配
  },
  false,
);

// 目标可以是任何元素或其他 EventTarget。
elem.dispatchEvent(event);

最后,完整demo代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <div>
    <button id="btn1">触发resize事件</button>
    <button id="btn2">触发自定义"sayBingGan"事件</button>
  </div>
  <script>
    {
      const btn1 = document.getElementById("btn1");
      btn1.addEventListener("click", () => {
        // 触发resize事件
        window.dispatchEvent(new Event("resize"));
      });

      // 监听resize事件
      window.addEventListener("resize", () => {
        console.log("resize event fired");
      });
    }
    {
      const btn1 = document.getElementById("btn2");
      btn1.addEventListener("click", () => {
        // 方式一:创建自定义事件 Event
        // let myEvent = new Event("sayBingGan");
        // 方式二:更高级方式创建自定义事件, Event + 参数
        let myEvent = new CustomEvent("sayBingGan", {
          // 自定义数据
          detail: {
            a: "参数1",
            b: "参数2",
          },
        });

         // 方式三:createEvent + event.initEvent(type, bubbles, cancelable) -- 已经弃用
         // 警告:与 createEvent 一起使用的许多方法(例如 initCustomEvent)已被弃用。请使用 event 构造函数代替。

        // 触发事件
        window.dispatchEvent(myEvent);
      });

      // 监听事件
      window.addEventListener("sayBingGan", (e) => {
        console.log("sayBingGan event fired", "饼干", e);
      });
    }
  </script>
</html>

若对你有帮助,请点个赞吧,若能打赏不胜感激,谢谢支持!
本文地址:https://www.jianshu.com/p/46bcee7e559e?v=1726299370541,转载请注明出处,谢谢。

参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/createEvent

相关文章

  • jQuery自定义事件,事件冒泡,节点

    主动触发与自定义事件 主动触发 使用jquery对象上的trigger方法来触发对象上绑定的事件。 自定义事件 除...

  • this.$emit()

    this.$emit("自定义事件") 通过触发自定义事件,来给触发监听事件

  • 绑定事件bind

    click 主动触发与自定义事件 主动触发 可使用jquery对象上的trigger方法来触发对象上绑定的事件。 ...

  • js设置或禁用鼠标右键菜单

    当用户点击鼠标右键的时候oncontextmenu事件被触发 js禁用鼠标右键菜单 js自定义鼠标右键菜单 htm...

  • vs2017开发ActiveX(主讲OCX)(六)、添加自定义事

    添加自定义事件 前言 自定义事件与常用事件的不同之处在于它们不会被类COleControl自动触发。 自定义事件将...

  • js自定义触发事件

    一、element.dispatchEvent() 对于标准浏览器,其提供了可供元素触发自定义事件的方法:elem...

  • 16-事件

    只能用button绑定 trigger 触发事件 可以触发原始事件 也可以触发自定义事件 事件冒泡 event.s...

  • jQuery例子记录(持续更新)

    目录: 1.自定义事件2.操作DOM(与JS原生对比) 1.自定义事件 绑定自定义事件: 事件名称refresh....

  • 自定义事件

    场景:开发widget组件动态加载js脚本文件,并且触发相关方法等。这里借助自定义事件CustomEvent,Ev...

  • angular6.x--其它

    EventEmitter实现自定义事件 通常,指令使用 Angular EventEmitter 来触发自定义事件...

网友评论

    本文标题:js 自定义事件与触发

    本文链接:https://www.haomeiwen.com/subject/sdpvljtx.html