欢迎光临散文网 会员登陆 & 注册

《建议收藏》JS高级 - 事件流 事件代理

2020-06-08 14:23 作者:MagnumHou  | 我要投稿

一、事件流

事件流用来描述从页面中接收事件的顺序。

在JS中的事件流,有两种:事件冒泡流 和  事件捕获流。

1.1 事件冒泡流

也叫IE事件流,就是在嵌套的元素中,给存在嵌套关系的多个元素设置同种的事件类型,当触发最内层最具体的那个元素这个事件时,那么外层设置了相同事件类型的元素,会被依次执行。所有事件处理程序默认都是事件冒泡的。

事件冒泡很明显,会带来一些问题,本来我们只想执行嵌套元素中内部的某个元素的事件,然后由于事件冒泡,外层元素的相同事件也会被触发,这样就需要我们对其进行阻止。阻止事件冒泡的方式如下:

支持DOM2级事件处理程序的浏览器阻止事件冒泡的方法

IE8及以下: 对象不支持“stopPropagation”属性或方法

ev.cancelBubble = true;

浏览器能力检测:

阻止事件冒泡的兼容写法

1.2 事件捕获流

也叫网景事件流,和事件冒泡流完全相反。嵌套元素设置相同的事件类型,事件冒泡流执行顺序由 最内部最具体的元素 向外依次扩散执行 ;而事件捕获流,执行顺序则是 由最外层最不具体的元素 向最内层最具体的元素 扩散

只有支持 DOM2 级事件处理程序的浏览器,才支持事件捕获流。而所有的事件处理程序,默认都是事件冒泡流。所以,不必担心事件捕获的问题,可以放心的使用事件冒泡流相关的操作。只有特殊的情景下,才会用到事件捕获流。

DOM2事件处理程序,通过设置第三个参数,来确认是 事件捕获流 还是 事件冒泡流阶段。

addEventListener(type,fn,boolean)

参数  type 指定事件类型

fn 指定事件触发的事件函数

boolean  布尔值。默认是false, 事件冒泡阶段。如果设置为true,则为事件捕获阶段。


DOM2事件处理程序演示事件冒泡
OM2事件处理程序演示事件捕获
阻止事件捕获:和阻止事件冒泡的方式是一样的

1.3 事件代理

也叫事件委托。借助事件冒泡的原理,用父元素去处理子元素中具有相同的事件。这样可以减少DOM的操作。

html代码
JS代码普通的操作方式
事件代理优化

JQ中的事件委托

JQ中的事件委托

1.5 阻止默认行为

有一些元素或浏览器本身具有某些默认行为。

如:在浏览器页面中,鼠标右键会出现操作面板;

img标签通过src属性去请求资源;

a标签href属性跳转功能;

表单的提交事件等等。

通过事件对象查看 cancelable 属性,如果值为 true,则可以取消默认行为,否则则不可以。

阻止默认行为

1.6 拖拽事件

图示


HTML代码
CSS代码
JS部分代码


看完点个赞,是对up主最大的支持......持续更新中.... 

获取更多前端知识,搜索微信公众号:前端知识分享喵


《建议收藏》JS高级 - 事件流 事件代理的评论 (共 条)

分享到微博请遵守国家法律