首页 > 其他分享 >面试-JS Web API-事件绑定和事件代理

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

时间:2024-09-12 15:13:04浏览次数:1  
标签:Web 绑定 target 元素 bindEvent JS API 事件 selector

  • 编写一个通用的事件监听函数
  • 描述事件冒泡的流程
  • 无线下拉的图片列表,如何监听每个图片的点击?---事件代理 用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!');
  }
});

标签:Web,绑定,target,元素,bindEvent,JS,API,事件,selector
From: https://www.cnblogs.com/gardenOfCicy/p/18410092

相关文章

  • 通过LiveGBS实现安防监控摄像头GB28181转成WebRTC流实现web浏览器网页无插件低延迟直
    @目录1、WebRTC超低延时直播2、WebRTC延时对比3、LiveGBS的低延时的WebRTC流4、分屏页面如何选择默认播放流5、无法播放Webrtc6、搭建GB28181视频直播平台1、WebRTC超低延时直播需要低延时的视频流监控播放,之前可以用rtmp的低延时播放(1秒左右),随着浏览器对rtmp的禁用,无插件的低延......
  • json数据解析
    Stringdata="{json}";ObjectMapperobjectMapper=newObjectMapper();JsonNoderootNode=null;try{rootNode=objectMapper.readTree(data);//通过将String类型的json数据转化为JsonNode对象}catch(JsonPr......
  • js 变量提升
    JavaScript中的变量提升(hoisting)是指在代码执行之前,变量和函数的声明会被提升到作用域的顶部。这意味着你可以在声明之前使用变量和函数,而不会引发错误。变量提升的规则如下:变量声明(使用var关键字)会被提升到其所在作用域的顶部,并初始化为undefined。函数声明会被提升到其所在......
  • 全国增值税发票查验接口平台-JavaScript发票验真api示例
    全国增值税发票查验接口平台旨在优化纳税服务,加强企业发票管理,确保税收工作的准确性。企业财务可以通过发票查验接口方便快捷的验证增值税发票管理系统开具发票的真伪,以实现发票的自动化管理,减少人工操作失误,提高识别、录入、查验的准确性和工作效率,从而有效防止税务欺诈和逃......
  • Mybatis读取和存储json类型的数据
    目录一、测试使用JSONObject来获取json二、设置@TableName的autoResultMap为true,@TableField的typeHandler为JacksonTypeHandler.class三、设置xml当中的resultMap四、JacksonTypeHandler讲解五、新增假如是JSONObject异常问题六、遇到转义的问题不管数据库当中是以json还是longte......
  • 淘宝api的理解与认知
    在当今电子商务的繁荣发展下,淘宝作为中国领先的电商平台,不仅为消费者提供了便捷的购物环境,也为商家们提供了强大的数据支持和服务能力。淘宝开放平台提供的API接口使得商家能够高效地获取店铺和商品的实时数据,从而更好地分析市场趋势、优化店铺运营、提升用户体验。淘宝API接口是为......
  • 大模型API与前端的结合使用
    大模型API与Flask项目示例一、输入问题交给后台处理获取表单GET,通过模版表单将问题提交给后台POST模版文件apis.html如下:<!DOCTYPEhtml><htmllang='en'><head><metacharset='UTF-8'><metaname='viewport'content='initinal-scale=......
  • 抖音电商商品采集接口api 店铺商品列表sku返回值
    如今,抖音已经成为国民最受欢迎的APP。因为抖音的存在,我们的生活开始变得更加有趣,同时,抖音带货,抖音duan等等呼之欲出,越来越多的人开始加入到抖音大战中去。在抖音进行带货或者进行短视频创作,做好数据统计工作是非常重要的。但是,很多抖音小白们并不是很明白抖音数据统计在哪里看,下面......
  • WebGIS开发系列教程(2):Openlayers概述
    本系列教程为webgis二维开发入门openlayers零基础小白学习教程,本篇为第二篇。完整版可以查看文末链接下载。上一篇:下一篇:1.Openlayers是什么Openlayers是一个模块化、高性能并且功能丰富的WebGIS客户端的JavaSript包,用于显示地图及空间数据,并与之进行交互,具有灵活的扩展机......
  • Gitee上那些开源的WebGIS项目(三):基于webGIS的大气监测系统
    项目介绍本项目是我的本科毕业设计,基于webGIS的大气监测系统,主要是基于ArcgisApiforjs构建了一个大气监测系统,并且通过Deeplearning4j深度学习库构建lstm模型进行空气质量指数预测。主要实现污染物可视化,模型训练,AQI指数预测等。项目地址:https://gitee.com/nimi317该......