事件代理?

1.什么是事件代理?

        事件代理也叫事件委托,只指定一个事件处理程序,就可以管理某一类型得事件。

        可以简单理解为,事件代理就是将本应该绑定子元素事件绑定给父元素代理。它的优点就是:减少事件得执行,减少浏览器重排重绘,优化页面性能,给新增元素绑定事

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>// 延迟代码执行 页面加载完毕后再执行window.onload = function () {var ul = document.querySelector('ul');console.log(ul, '头部获取');}</script>
</head><body><ul><li>我是第1个li</li><li>我是第2个li</li><li>我是第3个li</li><li>我是第4个li</li><li>我是第5个li</li><li>我是第6个li</li><li>我是第7个li</li><li>我是第8个li</li><li>我是第9个li</li><li>我是第10个li</li></ul><script>/*** 什么是事件委托/事件代理******************** 只指定一个事件处理程序 就可以管理某一类型的事件* 将本应该绑定给子元素事件绑定父元素代理* 优点:减少事件的执行,减少浏览器重排和重绘,优化页面性能,可以给新增元素绑定事件*/var ul = document.querySelector('ul');// children获取元素所有子元素节点var lis = ul.children;// console.log(lis,'获取子元素节点');// for(var i=0;i<lis.length;i++){//   lis[i].onclick = function(){//     this.style.backgroundColor = 'red';//   }// }// 给父元素绑定事件ul.onclick = function () {console.log(event.target, '事件对象');event.target.style.backgroundColor = 'red';}var newLi = document.createElement('li');newLi.innerHTML = '我是新增li';ul.appendChild(newLi);</script>
</body></html>

浏览器运行结果如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><ul><li id="one">第一个li标签</li><li id="two">第二个li标签</li><li id="three">第三个li标签</li></ul><script>// var one = document.getElementById('one');// var two = document.getElementById('two');// var three = document.getElementById('three');// one.onclick = function(){//   this.innerHTML = 'hello html'// }// two.onclick = function(){//   this.innerHTML = 'hello css'// }// three.onclick = function(){//   this.innerHTML = 'hello js'// }/*** 将li的事件代理给ul*/var ul = document.querySelector('ul');ul.onclick = function () {// console.log(event.target)// 获取点击的某一个li元素 var target = event.target;switch (target.id) {case 'one':target.innerHTML = 'hello html';break;case 'two':target.innerHTML = 'hello css';break;case 'three':target.innerHTML = 'hello js';break;default:target.innerHTML = '我是li标签';}}</script>
</body></html>

浏览器运行结果如下:

 


2.事件类型

        select 输入框选择字符触发    resize 窗口缩放触发    scroll 滚动事件     获取滚动条距离上方位置 document.documentElement.scrollTop || window.pageYoffset;
        鼠标事件
            mouseenter    mousemove    mouseleave    mouseup    mousedown    mousewheel
        键盘事件
            keyup 键盘抬起    keydown 键盘按下    keypress 键盘持续按下
        输入框事件
            focus 聚焦    blur失焦    input 监听输入框事件    textInput 监听输入框事件 使用dom2级事件进行绑定

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 100px;height: 100px;background-color: red;}</style>
</head><body><input type="text"><div>我是一个div</div><!-- <div style="height: 5000px;"></div> --><script>var input = document.querySelector('input');/*** 1.select 当选择输入框字符时候触发 火狐不支持*/input.onselect = function () {console.log(window.getSelection().toString(), '我被触发了');}/*** 2.当页面发生缩放时候触发*/// window.onresize = function(){//   console.log(window.outerWidth,window.outerHeight)// }/*** 3.滚动事件 scroll*/window.onscroll = function () {// console.log(window.pageYOffset,'获取距离上方位置')console.log(document.documentElement.scrollTop, '获取距离上方位置')}/*** 4.监听输入框值事件*/input.oninput = function () {console.log(event.target.value, '输入框输入的值')}/***5. 聚焦事件 focus*/// input.onfocus = function () {//   this.style.backgroundColor = 'red'// }/*** 6.失焦事件 blur*/input.onblur = function () {// this.style.backgroundColor = 'blue';}/*** 鼠标事件 * mouseenter 鼠标移入 * mouseleave 鼠标移除* mousemove  鼠标一直移动* mousedown * mouseup * mousewheel * click * dbclick*/var div = document.querySelector('div');div.onmouseenter = function () {console.log('鼠标移入');}div.onmouseleave = function () {console.log('鼠标移出');}div.onmousemove = function () {console.log('鼠标一直移动');}div.onmousedown = function () {console.log('鼠标按下');}div.onmouseup = function () {console.log('鼠标抬起')}div.onmousewheel = function () {console.log('鼠标滚轮');}div.ondblclick = function () {console.log('鼠标双击');}/*** 键盘事件 * keydown 键盘按下事件* keyup   键盘抬起事件* keypress 键盘持续按下事件*/// input.onkeydown = function () {//   console.log(event.keyCode, '键盘keyCode我被按下了');// }// input.onkeyup = function () {//   console.log('键盘抬起');// }// input.onkeypress = function () {//   console.log('键盘持续按下事件');// }input.addEventListener('textInput', function (event) {console.log(event.data,'00000');})</script>
</body></html>

浏览器运行结果如下:

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

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

相关文章

nvm for windows使用与node/npm/yarn的配置

1 下载 nvm for windows download – github 下拉到Assets, 下载.exe文件 2 安装 安装到如下文件夹中 目录可以自己选, 可以换别的名字, 自己记住即可 新手建议全部看完再进行个人配置, 或者使用与博主一致的路径 D:\DevelopEnvironment\nvm3 配置nvm使用的镜像 node_mir…

Linux 进程(二)

1.当前工作目录 Linux 下使用 ls /proc 查看程序中的进程&#xff0c;其中这些蓝色的数字代表的就是进程。 其中cwd(current working directory)就是当前工作目录&#xff0c;那么为什么cwd 和 exe 是在同一级目录下呢因为 进程需要依赖可执行程序&#xff0c;可执行程序需要依…

FPGA设计时序约束十、others类约束之Set_Disable_Timing

目录 一、序言 二、Set Disable Timing 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、工程示例 四、参考资料 一、序言 在Vivado的时序约束窗口中&#xff0c;存在一类特殊的约束&#xff0c;划分在others目录下&#xff0c;可用于设置忽略或修改默认的时…

合阔智云:实现API无代码开发,连接ERP系统和CRM系统提高运营效率

概述 合阔智云&#xff0c;一家成立于2011年的科技公司&#xff0c;核心业务是提供云原生和移动化设计的新一代全渠道“云端一体”履约中台和去中心化模式智能门店供应链业务中台。他们的系统可以无需API开发即可实现电商系统和客服系统的连接和集成&#xff0c;大大提高了企业…

Egg.js中Cookie和Session

Cookie HTTP请求是无状态的&#xff0c;但是在开发时&#xff0c;有些情况是需要知道请求的人是谁的。为了解决这个问题&#xff0c;HTTP协议设计了一个特殊的请求头&#xff1a;Cookie。服务端可以通过响应头&#xff08;set-cookie&#xff09;将少量数据响应给客户端&#…

基于单片机智能电子密码锁设计

**单片机设计介绍&#xff0c;基于单片机智能电子密码锁设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能电子密码锁设计是一种利用单片机&#xff08;如Arduino、Raspberry Pi等&#xff09;和相关电子元件来…

VMware虚机重启后静态IP不生效

配置好一套虚机之后&#xff0c;因为重启电脑&#xff0c;导致虚机的静态ip配置不生效&#xff0c;xshell连接不上虚机。以下是自查和解决方案&#xff1a; 1.使用su -进入root用户 2.查看打开虚机的teminal窗口查看配置的ip文件&#xff1a;vim /etc/sysconfig/network-script…

第八天:信息打点-系统端口CDN负载均衡防火墙

信息打点-系统篇&端口扫描&CDN服务&负载均衡&WAF防火墙 一、知识点 1、获取网络信息-服务器厂商&#xff1a; 阿里云&#xff0c;腾讯云&#xff0c;机房内部等。 网络架构&#xff1a; 内外网环境。 2、获取服务信息-应用协议-内网资产&#xff1a; FTP…

SparkRDD及算子-python版

RDD相关知识 RDD介绍 RDD 是Spark的核心抽象&#xff0c;即 弹性分布式数据集&#xff08;residenta distributed dataset&#xff09;。代表一个不可变&#xff0c;可分区&#xff0c;里面元素可并行计算的集合。其具有数据流模型的特点&#xff1a;自动容错&#xff0c;位置…

VBA技术资料MF88:测试Excel文件名是否有效

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

【面试】typescript

目录 为什么用TypeScript&#xff1f; TS和JS的区别 控制类成员可见性的访问关键字&#xff1f; public protected&#xff09;&#xff0c;该类及其子类都可以访问它们。 但是该类的实例无法访问。 私有&#xff08;private&#xff09;&#xff0c;只有类的成员可以访问…

【RT-DETR改进】SIoU、GIoU、CIoU、DIoU、AlphaIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了RT-DETR的重大改进&#xff0c;特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体&#xff0c;如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU&#xff0c;还融合了“Alpha”思想&#xff0c;创造了一系列新的损失函数。这些组合形式的…