【JavaScript 漫游】【021】EventTarget 接口

星空

事件的本质是程序各个组成部分之间的一种通信方式,也是异步编程的一种实现。DOM 支持大量的事件。

EventTarget 接口概述

DOM 的事件操作(监听和触发),都定义在 EventTarget 接口。所有节点对象都部署了这个接口,其他一些需要事件通信的浏览器内置对象(比如,XMLHttpRequestAudioNodeAudioContext)也部署了这个接口。

该接口主要提供了三个实例方法。

  • addEventListener:绑定事件的监听函数
  • removeEventListener:移除事件的监听函数
  • diapatchEvent:触发事件

EventTarget.addEventLIstener()

用于在当前节点或对象上,定义一个特定事件的监听函数。一旦这个事件发生,就会执行监听函数。该方法没有返回值。

target.addEventListener(type, listener[, useCapture]);
  • type:事件名称,大小写敏感
  • listener:监听函数,事件发生时,会调用该监听函数
  • useCapture:监听函数是否在捕获阶段触发,默认 false
function hello() {console.log('Hello world')
}var button = document.getElementById('btn');
button.addEventListener('click', hello, false);

第二个参数除了监听函数,还可以是一个具有 handleEvent 方法的对象。

buttonElement.addEventListener('click', {handleEvent: function (event) {console.log('click');}
});

第三个参数除了布尔值 useCapture,还可以是一个属性配置对象。该对象有以下属性。

  • capture:布尔值,表示该事件是否在 捕获阶段 触发监听函数
  • once:布尔值,表示监听函数是否只触发一次,然后就自动移除
  • passive:布尔值,表示监听函数不会调用事件的 preventDefault 事件。如果监听函数调用了,浏览器将忽略这个要求,并在监控台输出一行警告。

如果希望事件监听函数只执行一次,可以打开属性配置对象的 once 属性。

element.addEventListener('click', function(event) {// 只执行一次的代码
}, { once: true });

addEventListener() 可以为针对当前对象的同一个事件,添加多个不同的监听函数。这些函数按照添加顺序触发,即先添加先触发。如果为同一个事件多次添加同一个监听函数,该函数只会执行一次,多余的添加将自动被去除(不必使用 removeEventListener 方法手动去除)。

function hello () {console.log('Hello world');
}document.addEventListener('click', hello, false);
document.addEventListener('click', hello, false);

执行上面代码,点击文档只会输出一行 Hello world

如果希望向监听函数传递参数,可以用匿名函数包装一下监听函数。

function print(x) {console.log(x);
}var el = document.getElementById('div1');
el.addEventListener('click', function (){ print('Hello'); }, false);

监听函数内部的 this,指向当前事件所在的那个对象。

EventTarget.removeEventListener()

用来移除 addEventListener() 添加的事件监听函数。该方法没有返回值。

div.addEventListener('click', listener, false);
div.addEventListener('click', listener, false);

它的参数与 addEventListener() 完全一致。

EventTarget.dispatchEvent()

在当前节点上触发指定事件,从而触发监听函数的执行。该方法返回一个布尔值,只要有一个监听函数调用了 Event.preventDefault(),则返回值为 false,否则为 true

target.diapatchEvent(event);

它的参数是一个 Event 对象的实例。

para.addEventListener('click', hello, false);
var event = new Event('click');
para.dispatchEvent(event);

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

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

相关文章

Java中的数据类型详解

引言 在Java编程中,数据类型是非常重要的概念,它定义了数据的类型和范围,帮助程序员有效地操作数据。Java的数据类型可以分为两大类:基本数据类型和引用数据类型。本文将详细介绍Java中的各种数据类型,并附上相应的代…

leetcode:46.全排列

1.什么是排列? 有顺序!! 2.树形结构: 使用used数组进行标记取过的元素,一个元素一个元素地进行取值,取完之后将used数组进行标记。 3.代码实现:(循环从i0开始,而不是…

Spring事务模板及afterCommit存在的坑

大家好,我是墨哥(隐墨星辰)。今天的内容来源于两个线上问题,主要和大家聊聊为什么支付系统中基本只使用事务模板方法,而不使用声明式事务Transaction注解,以及使用afterCommit()出现连接未按预期释放导致的…

极狐GitLab 16.9 重磅发布,快来 pick 你心仪的功能吧~【五】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 沿袭我们的月度发版机制,今天我们正式发布极狐GitL…

js 如何判断对象自身为空

1.JSON.stringify JSON.stringify 方法可以使对象序列化,转为相应的 JSON 格式。 复制代码 const obj {}; console.log(JSON.stringify(obj) {}) // true缺点:如果存在 undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略&…

pycharm如何安装pygame库

pycharm如何安装pygame库 PyCharm是Python中广受欢迎的一种IDE,它可以为用户提供许多工具和便利的服务,从而大大提高开发效率。pygame库可以用python进行游戏开发提供很好的支持,那么在ptcharm中如何安装pygame库呢? 一、安装步…

Jmeter系列(2)目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前,需要先对工具的目录有些了解,也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

DBeaver一段时间不使用,就会自动断开连接,需要刷新数据库或者断开重连解决方案 DB2

DBeaver一段时间不使用,就会自动断开连接,需要刷新数据库或者断开重连解决方案 DB2

QT GUI编程常用控件学习

1 GUI编程应该学什么 2 QT常用模块结构 QtCore: 包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用 QtGui: 包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类 QtWidgets: 包含了一些列创建桌面应用的UI元素…

分享从零开始学习网络设备配置--任务5.1 组建直连式二层无线局域网

任务要求 (1)组建直连式二层无线局域网,网络拓扑图如图 (3)路由器、交换机和AC等网络设备端口IP地址规划如表 (4)组建直连式二层无线局域网,配置AP上线、WLAN业务参数和实现STA能正…

qt程序中,如何做才能用到OpenGL ES图形api

要在Qt程序中使用OpenGL ES图形API,您可以通过以下几种方式实现: 使用QOpenGLWidget:QOpenGLWidget是Qt提供的一个用于OpenGL渲染的窗口部件。它简化了OpenGL上下文的创建和管理,使开发者可以专注于编写渲染代码。通过继承QOpenG…

React歌词滚动效果(跟随音乐播放时间滚动)

首先给audio绑定更新时间事件 const updateTime e > {console.log(e.target.currentTime)setCurrentTime(e.target.currentTime);};<audiosrc{currentSong.url}ref{audio}onCanPlay{ready}onEnded{end}onTimeUpdate{updateTime}></audio>当歌曲播放时间改变的时…

黑马程序员Java面试专题(2)|并发编程篇(1)线程基础

指路&#x1f449; 黑马程序员Java面试专题&#xff08;1&#xff09;|常见集合篇&#xff08;1&#xff09;ArrayList&LinkedList-CSDN博客https://blog.csdn.net/YOYU_/article/details/135932520黑马程序员Java面试专题&#xff08;1&#xff09;|常见集合篇&#xff0…

AI数字人SadTalker实战

1.概述 AI数字人在营销和品牌推广中扮演着至关重要的角色&#xff0c;许多企业和个人正积极利用数字技术来打造属于自己的财富。有没有一种简单而免费的方式来创建自己的数字人呢&#xff1f;本篇博客笔者将为大家介绍如何搭建属于自己的AI数字人。 2.内容 2.1 什么是SadTalker…

springAOP落地实现

文章目录 前言一、熟悉相关概念&#xff1a;1、Aspect&#xff1a;2、Pointcut&#xff1a;3、Before&#xff1a;4、AfterReturning&#xff1a;5、AfterThrowing&#xff1a;6、After&#xff1a;7、Around&#xff1a; 二、具体使用case&#xff1a;1.pom文件2.代码 总结 前…

MySQL 篇-深入了解 DDL 语言(一)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 MySQL 说明 2.0 DDL 语言 2.1 DDL 语言 - 定义数据库 2.1.1 创建数据库操作 2.1.2 查看数据库操作 2.1.3 使用数据库操作 2.1.4 删除数据库操作 2.2 DDL 语言 …

PHM设备健康管理工厂案例

PHM&#xff08;Prognostics and Health Management&#xff09;设备健康管理在工厂应用中有许多成功的案例。以下是一些常见的工厂案例&#xff1a; 1.GE航空发动机&#xff1a;GE航空发动机利用PHM技术对发动机进行实时监测和健康管理&#xff0c;帮助航空公司提前预知发动机…

【PHP设计模式00】23种设计模式实战

【写在前面】 最近写一些关于PHP设计模式的文章,对常用设计模式进行总结,其中参考了关于设计模式的书籍、前辈的博客,以及自己的实际工作经验与体会。才疏学浅,如有疏漏,敬请交流。 所谓设计模式,就是特定环境下同类问题的一种解决方案,与语言无关,随着各种各样…

挑战30天学完Python:Day22 爬虫

&#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点知识&#xff0c;但又没…

LeetCode第二题: 两数相加

文章目录 题目描述示例 解题思路 - 迭代法Go语言实现 - 迭代法算法分析 解题思路 - 模拟法Go语言实现 - 模拟法算法分析 解题思路 - 优化模拟法主要方法其他方法的考虑 ‍ 题目描述 给出两个非空的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照逆序的方…