js dispatchEvent派发自定义事件

news2024/12/24 2:13:27

低版本IE浏览器不兼容

dispatchEvent使用

在标准浏览器提供了元素触发自定义事件的方法 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派发自定义事件

一般情况我们使用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

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等 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Shiro】入门概述

1.是什么 Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完 成&#xff1a;认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松 地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。 官网&…

使用 React Native 针对 Android 进行开发

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 概述 通过安装所需工具开始使用 React Native 创建新的 React Native 项目 本指南将有助于开始使用 Windows 上的…

【操作系统】聊聊进程间通信方式

作为操作系统软件治理的核心 进程&#xff0c;那么进程间通信的方式就非常重要&#xff0c;常见的比如管道、消息队列、共享内存、信号量、信号、Socket等。本篇主要简单介绍下 我们知道每个进程都有自己独立的用户空间&#xff0c;而内核空间是共享的。 管道 ps -ef | gre…

大数据与云计算——让我们进入数字化的新纪元

当谈论大数据和云计算时&#xff0c;我们进入了一个数字化时代的新纪元。这两个领域在科技和商业领域都有着深远的影响&#xff0c;改变了我们如何处理和存储数据&#xff0c;以及如何进行计算和分析。本文将探讨大数据和云计算的基本概念&#xff0c;它们的关系以及它们在不同…

YOLO Magic - 强化YOLOv5的视觉任务框架

YOLO Magic&#x1f680; - 强化YOLOv5的视觉任务框架 YOLO Magic&#x1fa84;是一个基于Ultralytics YOLOv5 v7.0 版本的扩展&#xff0c;旨在为视觉任务提供更强大的功能和更简单的操作。它在YOLOv5的基础上引入了丰富的网络模块&#xff0c;并提供了直观易用的Web操作界面&…

mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内

要根据经纬度判断一个坐标是否在一个多边形区域内&#xff0c;MySQL提供了几种函数来处理地理空间数据&#xff0c;其中包括用于处理多边形区域的函数。 1.创建一个包含多边形区域的表&#xff1a; 首先&#xff0c;创建一个表来存储多边形区域。可以使用ST_GeomFromText函数将…

Java集合之LinedList

LinedList类实现了List接口&#xff0c;他提供了&#xff08;双向的&#xff09;链表数据结构 在该链表中的每一个元素除了存储本身的内容之外还存储指向前一个元素的指针和指向后一个元素的指针&#xff0c;下图展示了一个包含三个元素的双向链表&#xff0c;每个链表都有一个…

C#使用DirectX SDK 加载.x三维模型

最近因为项目要做显示一个三维模型&#xff0c;所以研究了下如何在Winform中加载并显示三维模型。在Windows平台巨硬公司提供了DirectX SDK用于渲染图形&#xff0c;参考了几篇文章做了个demo记录下&#xff0c;以便日后温习只用。这个SDK涉及到了计算机图形学的一些基础知识&a…

听GPT 讲Istio源代码--operator

File: istio/istioctl/pkg/waypoint/waypoint.go 在Istio项目中&#xff0c;istio/istioctl/pkg/waypoint/waypoint.go文件是istioctl的源代码之一&#xff0c;用于管理Istio的路由规则。 revision变量用于指定Istio的版本号&#xff0c;例如可以值 v1.2.3。这个版本号用于检索…

openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据

文章目录 openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据 openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据 在使用表的过程中&#xff0c;可能会需要删除已过期的数据&#xff0c;删除数据必须从表中整行的删除。 SQL不…

arcgis拓扑检查实现多个矢量数据之间消除重叠区域

目录 环境介绍&#xff1a; 操作任务&#xff1a; 步骤&#xff1a; 1、数据库和文件结构准备 2、建立拓扑规则 3、一直下一页默认参数后&#xff0c;进行拓扑检查 4、打开TP_CK_Topology&#xff0c;会自动带出拓扑要素&#xff0c;红色区域为拓扑错误的地方&#xff1…

Python 魔法方法

视频版教程 Python3零基础7天入门实战视频教程 Python的魔法方法&#xff0c;也称为特殊方法或双下划线方法&#xff0c;是一种特殊的方法&#xff0c;用于在类中实现一些特殊的功能。这些方法的名称始终以双下划线开头和结尾&#xff0c;例如__init__&#xff0c;repr&#x…

NV040D语音芯片丨助力空气净化器语音功能

空气净化器通过过滤网和电子静电等技术&#xff0c;可以清除室内空气中的有害物质&#xff0c;如灰尘、花粉、细菌、甲醛等&#xff0c;达到净化空气的目标&#xff0c;让人们呼吸到更加清新的空气&#xff0c;保护人体健康。在空气净化器中加入九芯语音芯片的提醒功能&#xf…

jvm 内存模型介绍

一、类加载子系统 1、类加载的过程&#xff1a;装载、链接、初始化&#xff0c;其中&#xff0c;链接又分为验证、准备和解析 装载&#xff1a;加载class文件 验证&#xff1a;确保字节流中包含信息符合当前虚拟机要求 准备&#xff1a;分配内存&#xff0c;设置初始值 解析&a…

Nginx运维知识基础详解

一. nginx简介 1. nginx介绍 nginx是一个HTTP和反向代理服务器&#xff0c;邮件代理服务器&#xff0c;通用的TCP/UDP代理服务器。 反向代理服务器&#xff1a; 作用就是负载均衡 2. 编译安装 #!/bin/bash#新建文件夹存放nginx源码包 mkdir -p /nginx cd /nginx# 下载nginx压…

2023-数仓建设规范指南

一、数据模型架构原则 1. 数仓分层原则 优秀可靠的数仓体系&#xff0c;往往需要清晰的数据分层结构&#xff0c;即要保证数据层的稳定又要屏蔽对下游的影响&#xff0c;并且要避免链路过长。那么问题来了&#xff0c;一直在讲数仓要分层&#xff0c;那数仓分几层最好&#x…

redis--windows配置--redis基础

写在前面&#xff1a; 文章目录 win安装配置密码配置服务服务已经存在 可视化工具运行类型基础类型 帮助文档命令通用命令string命令hashlistsetsortedset win安装 下载地址 然后一路next就可以了。 记得添加到环境变量 配置密码 在目录打开配置文件 搜索requirepass …

任意区域的色彩一致性处理方法

影像任意感兴趣区域的色彩一致性处理方法&#xff0c;主要是针对掩膜后的影像&#xff0c;类似下图&#xff0c;对非背景区域的像素进行处理 其中非黑色部分我们叫待匀色区域。 这种处理 对于wallis 和直方图匹配 很容易实现&#xff0c;但是颜色转移就相对而言 困难点。 颜…

【JavaScript保姆级教程】输出函数和初识变量

文章目录 前言一、输出内容1.1 document.write()函数1.2 console.log()函数查看终端输出信息 1.3 alert()函数 二、变量的使用1.1 变量的声明1.3变量的赋值1.4 变量的声明和赋值 三、输入提示框的使用总结 前言 JavaScript是一种强大的脚本语言&#xff0c;广泛应用于网页开发…

Linux中swap几乎耗尽,但物理内存还有空余的现象

故障现象&#xff1a; 产生此现象的原因&#xff1a; swappiness 配额设置了偏高的值。 还有一个潜在的因素是某个程序因其自身对内存管理的缺陷&#xff0c;形成了zombie进程、且为及时关闭的处理任务还在持续消耗Mem及swap。 解决办法&#xff1a; 调低swappiness 配额值&…