面试-JS Web API-事件绑定和事件代理

news/2024/9/28 13:21:22
  • 编写一个通用的事件监听函数
  • 描述事件冒泡的流程
  • 无线下拉的图片列表,如何监听每个图片的点击?---事件代理 用e.target获取触发元素 用matches判断是否是触发元素

事件绑定
addEventListener

function bindEvent(elem, type, fn) {elem.addEventListener(type, fn)
}const btn1 = document.getElementById('btn1')
bindEvent(btn1, 'click', e => {console.log(e.target) //获取触发的元素event.preventDefault() //阻止默认行为alert('我被点击了')
})

事件冒泡

function bindEvent(elem, type, fn) {elem.addEventListener(type, fn)
}const btn1 = document.getElementById('btn1')
bindEvent(btn1, 'click', e => {console.log(e.target) //获取触发的元素event.preventDefault() //阻止默认行为alert('我被点击了')
})const p1 = document.getElementById('p1')
const body = document.getElementById('body')
bindEvent(p1, 'click', e => {// e.stopPropagation()  //阻止冒泡alert('激活')
})bindEvent(body, 'click', e => {console.log(e.target)alert('取消')
})

事件代理

事件代理可以减少绑定的事件监听器数量,尤其是当需要给很多子元素绑定相同的事件时,通过给父元素代理绑定,可以节省内存开销,并且方便管理动态生成的元素。

  • 代码简洁
  • 减少浏览器内存占用
  • 但是不要滥用

    div里面有好多个a标签,不知道具体有几个,无法给每个a标签都绑定事件,那么可以给父元素div绑定,点击a标签的时候通过冒泡机制冒到div上。

通用事件绑定函数的优化

bindEvent接收四个参数,增加了一个selector
第一个if逻辑是说:假如只接收到了三个参数,也就是fn没传过来,为null,那么其实是少了selector 代理选择器,需要把 fn = selector,selector = null。
核心target.matches(selector)来检查触发事件的目标元素是否为selector。比如:

const parent = document.querySelector('.button-container');
parent.addEventListener('click', function(event) {if (event.target.matches('button')) {console.log('Button clicked!');}
});

👆我们只为父元素 parent 绑定了一个事件监听器,当任何子元素(button 元素)触发点击事件时,事件会冒泡到父元素,父元素就能捕获这个事件。我们使用 event.target.matches('button') 来检查触发事件的目标元素是否为 button,如果是,就执行相应的事件处理逻辑。

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

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

相关文章

用 Rust 实现敏感信息拦截插件,提升 AI 网关安全防护能力

本⽂对敏感信息拦截插件的使用方式和实现原理进行了简单介绍,它能够自动检测并处理请求和响应中的敏感词,有效防止敏感信息泄露。通过对不同数据范围的支持和灵活的配置选项,该插件能够适应各种应用场景,确保数据的安全性和合规性。希望对你有帮助!作者:刘毅杰,棱镜七彩…

Linux--软链接,硬链接

在 Linux 和类 Unix 系统中,软链接(符号链接)和硬链接是用于文件系统中引用文件的两种方式。它们各自有不同的特点和用途。 软链接(符号链接) 硬链接定义 软链接是一个指向另一个文件或目录的特殊文件,包含指向目标文件路径的文本信息 硬链接是指向文件系统中同一文件的…

ant design使用本地IconFont文件

先参考这个官网的示例 :官网示例:通过设置 createFromIconfontCN 方法参数对象中的 scriptUrl 字段, 可以使用 iconfont.cn 项目中的图标。在iconfont.cn网站使用symbol方式生成在线链接。 但官网的说明有个问题,就是全部使用的是网络引用,有时候我们需要的环境可能并不是…

容器云平台建设可行性分析报告

一、项目背景和原因1.1 什么是容器云1.2 容器和虚拟机的区别1.3 为什么要建设容器云1.4 我们的建设目标1.5 建设过程可能存在的风险二、容器云PaaS平台构建2.1 总体技术架构2.2 设计原则2.3 总计规划三、容器云平台关键技术选型3.1 容器核心技术3.2 容器编排技术3.3 容器网络技…

机器学习 - 课程笔记

线性回归 代价函数J,也被称为平方误差函数,用来描述假设函数值与真实值的误差大小。其中乘1/2是用于减少平均误差,并且后面求导会有一个2,可以消掉。线性回归的代价函数常用平方误差函数。假设函数的参数是x,代价函数的参数是θ。梯度下降法 要得到最小化代价函数的Θ0和Θ…

通过LiveGBS实现安防监控摄像头GB28181转成WebRTC流实现web浏览器网页无插件低延迟直播

@目录1、WebRTC超低延时直播2、WebRTC延时对比3、LiveGBS的低延时的WebRTC流4、分屏页面如何选择默认播放流5、无法播放Webrtc6、搭建GB28181视频直播平台 1、WebRTC超低延时直播 需要低延时的视频流监控播放,之前可以用rtmp的低延时播放(1秒左右),随着浏览器对rtmp的禁用,…

.NET Core 邮件发送使用库MailKit

安装库MailKit 发送邮件/// <summary>/// 发送邮件/// </summary>/// <param name="subject">邮件主题</param>/// <param name="body">邮件内容</param>public void SendEmail(string subject, string body){var mes…

2021 CSP-J 完善程序3

2021 CSP-J 完善程序3 1 完善程序 (单选题 ,每小题3分,共30分) (矩形计数)平面上有n个关键点,求有多少个四条边都和x轴或者y轴平行的矩形,满足四个顶点都是关键点。给出的关键点可能有重复,但完全重合的矩形只计一次。 试补全枚举算法 #include<stdio.h>struct poin…