当前位置: 首页 > news >正文

关于addEventListener的使用和注意项

一、addEventListener基本理解

addEventListener 是一个 JavaScript DOM 方法,用于向指定元素添加事件监听器。它接受三个参数:

  1. 事件类型:一个字符串,表示要监听的事件类型,如 ‘click’、‘mouseover’、‘keydown’ 等。

  2. 事件处理函数:当指定的事件发生时,会调用这个函数。这个函数接收一个参数,即触发事件的 Event 对象。

  3. 可选参数:这个参数可以是一个布尔值或一个对象。如果是布尔值,true 表示在捕获阶段调用事件处理函数,false 表示在冒泡阶段调用事件处理函数。如果是对象,可以包含以下属性:

    • capture:布尔值,表示是否在捕获阶段调用事件处理函数。
    • passive:布尔值,如果设置为 true,则表示事件处理函数不会调用 event.preventDefault()。这对于某些需要提高性能的滚动或触摸事件非常有用。
    • once:布尔值,如果设置为 true,则事件处理函数在第一次触发后就会被移除。(请注意,once 属性并非所有浏览器都支持,你需要检查你的目标浏览器是否支持这个属性。)
// 这是一个使用 addEventListener 的示例:document.querySelector('button').addEventListener('click', function(event) {console.log('Button clicked!');}, false);
// 在这个示例中,我们向一个按钮元素添加了一个点击事件监听器。当按钮被点击时,控制台会打印出 "Button clicked!"。

二、注意项

  1. addEventListener 用于向指定元素添加事件监听器,而 removeEventListener 用于移除已添加的事件监听器。为了避免内存泄漏,我们通常在组件卸载或页面销毁时移除已添加的事件监听器。

  2. addEventListener 的第一个参数是要监听的事件类型(如 ‘click’、‘touchstart’ 等)。

  3. addEventListener 的第二个参数是事件处理函数。为了能够在后面通过 removeEventListener 移除事件监听器,事件处理函数不应该是匿名函数或箭头函数,因为它们每次都会创建一个新的函数实例。也就是一个事件监听的 addEventListener 和 removeEventListener 的第二个参数应该是同一个事件处理函数实例。

  4. addEventListener 的第三个参数是一个可选参数,可以是一个布尔值或一个对象。如果是一个布尔值,true 表示在捕获阶段调用事件处理函数,false 表示在冒泡阶段调用事件处理函数。如果是一个对象,可以包含 capture 和 passive 两个属性。capture 属性的作用和上面提到的布尔值一样,passive 属性设置为 false 表示事件处理函数可以调用 event.preventDefault() 来阻止事件的默认行为。

  5. removeEventListener 和 addEventListener 里面的参数应该完全一样。如果 addEventListener 和 removeEventListener 的参数不一样,那么 removeEventListener 可能无法正确地移除事件监听器。removeEventListener 需要知道具体的事件类型、事件处理函数以及是否在捕获阶段移除事件监听器,才能正确地移除事件监听器。如果这些参数与添加事件监听器时的参数不一致,那么 removeEventListener 将无法找到并移除事件监听器。例如,如果你在添加事件监听器时使用了捕获阶段,但在移除事件监听器时没有指定,那么事件监听器将不会被移除,因为默认情况下,removeEventListener 会在冒泡阶段移除事件监听器。

http://www.lryc.cn/news/377329.html

相关文章:

  • 分享一下,如何搭建个人网站的步骤
  • (7)摄像机和云台
  • MicroBlaze IP核中的外设接口和缓冲器接口介绍
  • Java数据结构与算法(完全背包)
  • git merge(3个模式) 与 git rebase 图文详解区别
  • Eclipse 工作空间:深入解析与高效使用
  • Aspose将doc,ppt转成pdf
  • Flutter第十四弹 抽屉菜单效果
  • Docker Nginx
  • OpenVINO™ 2024.2 发布--推出LLM专属API !服务持续增强,提升AI生成新境界
  • 【Mybatis-Plus】根据自定义注解实现自动加解密
  • Window上ubuntu子系统编译Android
  • 【Java学习笔记】异常处理
  • Ubuntu20.04环境下Baxter机器人开发环境搭建
  • nccl 03 记 回顾:从下载,编译到调试 nccl-test
  • 关于车规级功率器件热可靠性测试的分享
  • 内核学习——1、list_head
  • JavaEE初阶--网络基本概念
  • gitlab-cicd-k8s
  • 盘点下常见 HDFS JournalNode 异常的问题原因和修复方法
  • 深入了解python生成器(generator)
  • 【Linux】Xshell和Xftp简介_安装_VMware虚拟机使用
  • 【轮询负载均衡规则算法设计题】
  • 张一鸣的产品哲学:与巨头共舞,低调中寻求突破
  • 【面试干货】throw 和 throws 的区别
  • 安卓手机删除的照片怎么恢复?3个方法,小技巧大作用
  • Unity制作背包的格子
  • 道可云元宇宙每日资讯|厦门:运用元宇宙技术助力直播电商发展
  • 电脑怎么卸载软件?多个方法合集(2024年新版)
  • 【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别