YanTianFeng的知识库

Want Coding

Want Reading

文章 89

访问 18443

评论 2

头像

YanTianFeng

发私信

文章 89
访问 18443
评论 2
JAVASCRIPT
返回顶部

Knowledge  javaScript事件 -- 事件流

标签   event   事件   事件流  

  ( 204 )       ( 0 )


前言

亲爱的萌新们,说到 javaScript 事件 有基础的童鞋用起来一定很 666 ,但事件流是什么鬼?我认识它吗?它认识我吗?我咋突然失忆了呢。。。哈哈哈,我想说的是,这是正常的,好多写前端页面 5 , 6 年的工程师面对【事件流】这个名词多少也会有疑问、不清楚,更别说是亲爱的萌新们了,别急,今天咱们就系统认识下【事件流】.

事件&事件流

事件:是文档或者浏览器窗口中发生的,特定的交互瞬间,是用户或者浏览器自身执行的某种动作,如 click , load , mouseover 都是事件的名字。

事件流:事件发生时会在元素节点与根节点之间按照特定的顺序传播,路径所经过的所有节点都会收到该事件,这个传播过程即 DOM 事件流。

由此就产生了两种事件流模型:

冒泡型事件流:事件的传播是从目标节点到根节点。

捕获型事件流:事件的传播是从跟节点到目标节点。


        
Click me!

点击页面中的 div 元素

冒泡型事件流中 click 事件传播顺序: div -> body -> html -> document

捕获型事件流中 click 事件传播顺序: document -> html -> body -> div

1 . IE9 +、 Firefox 、 Chrome 、 Safari 都支持事件冒泡和捕获;

2 .由于老版本浏览器不支持事件捕获,很少有人使用事件捕获 , 建议使用事件冒泡

事件流的典型应用-事件代理

传统的事件处理中,需要为每个元素添加事件处理器。 js 事件代理则是一种简单有效的技巧,通过它可以把事件处理器添加到一个父级元素上,从而避免把事件处理器添加到多个子级元素上。

事件代理

事件代理的原理用到的就是事件冒泡和目标元素,把事件处理器添加到父元素,等待子元素事件冒泡,并且父元素能够通过 target ( IE 为 srcElement )判断是哪个子元素,从而做相应处理。

事件代理的处理方式,代码如下:


  • red
  • orange

事件代理的好处

将多个事件处理器减少到一个,因为事件处理器要驻留内存,这样就提高了性能。

DOM 更新无需重新绑定事件处理器,因为事件代理对不同子元素可采用不同处理方法。如果新增其他子元素( a , span , div 等),直接修改事件代理的事件处理函数即可,不需要重新绑定处理器,不需要再次循环遍历。

事件代理的一个应用

点击一个列表项,输出对应的索引.