JavaScript之事件委托和事件代理

事件委托概念:

事件委托还有一个名字叫事件代理,JS高程上讲:事件委托就是利用事件冒泡,只制定一个时间处理程序,就可以管理某一类型的所有事件。
简单的说就是原本需要一个一个去处理的事件,现在只需要一个总的事件去管理他们即可 (自己理解的,可能有偏差)

用事件委托的意义

在JavaScript中,添加到页面上的事件处理次数将关系到页面的整体运行性能,访问dom的次数越多,引起浏览器重绘与重排的次数也就越多,就会延长整个页面的交互就绪时间,因此减少DOM操作是性能优化的主要思想之一。
每个函数都是一个对象,是对象就会占用内存,对象越多,内存占用率越大。如果要用事件委托,就会将所有的操作放到js程序里面,只对它的父级(如果只有一个父级)这一个对象进行操作,与dom的操作就只需要交互一次,这样就大幅度的减少与dom的交互次数,提高性能。

事件委托的原理

事件委托是利用事件的冒泡原理来实现的,就是事件从最深的节点开始,然后逐步向上传播事件。
例如:页面上有这么一个节点树,给最里面的节点加一个onclick事件,那么这个事件就会一层一层的往外执行。如果给最外面的div加点击事件,那么里面的节点做点击事件的时候,都会冒泡到最外层的节点上,所以都会触发,这就是事件委托,委托它们父级代为执行事件。

事件冒泡及捕获

事件处理过程分三个阶段:

  • 事件捕获阶段:当某个元素触发某个事件,顶层的document就会发出一个事件流,随着DOM节点向目标元素节点流去,直到找到目标节点。注意:该过程事件相应的监听函数不会被触发的。
  • 事件目标阶段:找到目标节点之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。
  • 事件起泡阶段:从目标节点开始,往顶层节点传播。途中如果有节点绑定了相应的事件处理函数,这些函数都会被触发。

事件委托的优点

  1. 大大减少了监听管理的函数。
  2. 可以动态添加和修改元素
  3. JavaScript和DOM节点之间的关联变少,进而减少了因循环引用而带来的内存泄漏发生的概率。

实现用事件委托达到直接处理节点一样效果

Event对象提供了一个属性叫target,可以返回事件的目标节点,target就可以表示为当前的事件操作的dom,但是不是真正操作dom。
注意:标准浏览器用ev.target,IE浏览器用event.srcElement
此时只是获取了当前节点的位置,并不知道是什么节点名称,就用nodeName来获取具体是什么标签名。这样实现了用事件委托达到直接处理节点一样效果,且每次只执行一次dom操作。

<script>window.onload=function(){var a=document.getElementById("a1");a.onclick=function(ev){var ev =ev || window.event;var  target=ev.target ||  ev.srcElement;if(target.nodeName  =='li'){alert("哈哈");}}}</script>
可以用事件委托的事件:

所有用到按钮的事件,多数的鼠标事件和键盘事件,例如:click,mousedown,mouseup,keydown,keyup,keypress。
注意:mouseover和mouseout虽然也有事件冒泡,但是处理它们的时候需要特别的注意,因为需要经常计算它们的位置,处理起来不太容易

JavaScript之事件委托和事件代理相关推荐

  1. JavaScript系列—简述JS中的事件委托和事件代理

    JS中的事件委托和事件代理 什么是事件委托? 事件委托还有一个名字叫事件代理,JS高程上讲:事件委托就是利用事件冒泡,只制定一个时间处理程序,就可以管理某一类型的所有事件.我用取快递来解释这个现象: ...

  2. js中的事件委托或是事件代理详解(转载)

    起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...

  3. JS事件委托或者事件代理原理以及实现

    事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...

  4. js事件委托或事件代理

    起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...

  5. 事件委托(事件代理)概述

    事件委托(事件代理)概述 什么是事件委托(事件代理) 事件委托(事件代理)是基于Js冒泡原理,把本来加在子元素身上的事件,加在了其父级身上. 通过event对象里记录的"事件源", ...

  6. js中的事件委托或是事件代理详解

    参考文章:https://www.cnblogs.com/liugang-vip/p/5616484.html 概述 事件委托也叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒 ...

  7. 在C#中使用代理的方式触发事件 (委托和事件 ) (转)

    From:  http://www.cnblogs.com/gzhnan/articles/1859477.html 在C#中使用代理的方式触发事件 (委托和事件 ) 事件(event)是一个非常重要 ...

  8. javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。...

    2018年12月13日更新 <!DOCTYPE html> <html lang="en"> <head><meta charset=&q ...

  9. 事件委托、事件冒泡与事件捕获

    目录 事件委托: 1.原理 2.实现 ①在介绍事件委托的方法之前,我们先来看一段一般方法的例子: ②那么我们用事件委托的方式做又会怎么样呢? ③要是每个li被点击的效果都不一样,那么用事件委托还有用吗 ...

  10. 什么是事件委托?事件委托的原理以及优缺点

    事件委托又称事件代理, 下面将要将要简要叙述一下这种方法的原理及优点 一什么是事件委托? 我们看下面的例子: 假使我们需要对 3 个 li 元素添加点击事件: 传统的方法是分别给每个 li 元素绑定 ...

最新文章

  1. 图论 ---- CF1495D .BFS Trees(图论最短路生成树+枚举计数+树的层次性)
  2. 一招一式攻克linux(四)
  3. What are Unix swap (.swp) files?
  4. Java服务CPU飙到99%问题排查
  5. 第十二届蓝桥杯JavaB组省赛H题 杨辉三角形
  6. 面向对象-多态的实现
  7. docker安装问题
  8. python哲学翻译_Python
  9. C++学习——C++中的四个智能指针
  10. 明小子动力上传拿webshell(1).zip
  11. Unity笔记——1.Unity3D脚本基础
  12. 再谈几种语言的运行速度比较:看第三方比较结论!
  13. Timesten Classic 18.1 建立缓存组
  14. C语言程序——标准输出格式
  15. 财务想转行?SAP咨询顾问了解一下
  16. oracle字段名小写改大写,Oracle数据库中如何实现将将表中字段名转换为大写
  17. excel如何快速查询银行卡号实名认证?
  18. 关于爬取猫眼电影的口碑评分和累计票房的尝试
  19. 【Scratch案例实操】Scratch字母排序 scratch编程案例教学 scratch创意编程 少儿编程教案
  20. 视频去水印软件?在线去除视频水印工具网站?

热门文章

  1. 同比 数据模型 环比_同比和环比计算公式?
  2. 关于MUI一个很实用的前端框架
  3. 热点的ap频段哪个快_热点ap频段有什么区别
  4. PHP面试技巧 之 职场暗语知多少?!
  5. Google Play镜像站
  6. 微信公众号软件安装管家所有软件插件打包
  7. 使用CSS控制表格设计出课程表实验内容:编写一个网页,内容为本学期本班的课程表,并使用CSS设计课程表的显示样式
  8. PS里面如何批处理图片
  9. 利用BigDecimal类巧妙处理Double类型精度丢失
  10. 印尼穴居小矮人是进化异类还是病态现代人?