美文网首页
事件流:捕获-目标-冒泡

事件流:捕获-目标-冒泡

作者: kup | 来源:发表于2018-08-05 10:30 被阅读0次

这两天在开发类似“有赞“编辑商铺页面的功能。鼠标悬浮到某个组件,出现”添加“组件的按钮,点击该按钮在右侧区域出现可供选择的基础组件模块;而鼠标点击某个组件,右侧区域则出现对该组件的操作面板。因为操作区都在右侧,所以基础组件模块和对组件的操作面板不能重叠出现。即点击组件在右侧区域出现操作面板,要隐藏可能存在的基础组件模块。

dom结构如下:

 .component // 组件 -- 点击它,右侧出现该组件的操作面板
     .show
         .top-add //在该组件的上方添加组件 -- 点击它,右侧出现基础组件选择模块
         .bottom-add // 在该组件的下方添加组件 -- 点击它,右侧出现基础组件选择模块
         .remove //删除该组件

从dom结构可以看出,两个绑定事件的dom节点之间有包含关系,component是爷爷辈,add是孙子辈。因此,在点击更深层次节点(add)时候,它的点击事件和component点击事件存在于同一个事件流中。因此,由于事件流的存在,在点击add时如果不阻止事件冒泡,就会触发component的点击事件。两个点击事件的结果互斥,所以无论怎么add,右侧区域都无法出现基础组件模块。 ̄□ ̄||

敲黑板knock, knock, 事件流:捕获阶段-目标阶段-冒泡阶段

如何阻止点击add触发component的事件行为呢?就是要阻止事件冒泡咯。用event的方法: event.stopPropagation()即可。

事件委托/事件代理

“在JavaScript中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能。导致这一问题的原因是多方面的。首先,每个函数都是对象,都会占用内存;内存中的对象越多,性能就越差。其次,必须事先指定所有事件处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间。”

“对“事件处理程序过多”问题的解决方案就是事件委托。事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例如,click事件会一直冒泡到document层次。也就是说,我们可以为整个页面指定一个onclick事件处理程序,而不必给每个可单击的元素分别添加事件处理程序。”

“对于事件代理来说,在事件捕获或者事件冒泡阶段处理并没有明显的优劣之分,但是由于事件冒泡的事件流模型被所有主流的浏览器兼容,从兼容性角度来说还是建议大家使用事件冒泡模型。”

“事件委托还有一个好处就是添加进来的元素也能绑定事件。”

ps. 关于事件(event)的target和currentTarget,target是真正发生事件的DOM元素,而currentTarget指的是绑定事件的元素。

非常详细的文章参考

相关文章

  • 事件基础(2)

    js事件的三个阶段:捕获,目标,冒泡 IE:IE事件流是事件冒泡流 Netscape事件流是事件捕获流 IE事件...

  • 22.DOM事件类

    一、事件级别 二、事件模型 捕获、冒泡 三、事件流 事件通过捕获到达目标元素,之后事件通过冒泡再上传到window...

  • 第13章、事件

    13.1 事件流 “DOM2级事件”规定事件流包括3个阶段:事件捕获阶段,处于目标阶段,事件冒泡阶段。事件捕获表示...

  • JS事件:target与currentTarget区别

    target在事件流的目标阶段;currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段...

  • JS事件流机制

    事件流指的是 1.节点的捕获2.处理事件3.事件的冒泡 目前分为事件冒泡流,事件捕获流; 区别:1.事件冒泡流在事...

  • js中的事件

    事件 事件流冒泡捕获阻止冒泡 阻止默认事件 常用事件 键盘 窗口 鼠标 拖放松开 表单 事件参数target 目标...

  • 事件捕获和事件冒泡

    事件捕获 事件流由document 向下扩散到目标对象的过程。 事件冒泡 事件流由目标对象向上扩散到documen...

  • DOM事件

    DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。 事件捕获(eve...

  • 实习第七十天(js事件机制)

    DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。 事件捕获(eve...

  • DOM事件与事件委托

    事件流 DOM 事件流分为三个阶段:捕获阶段、目标阶段、冒泡阶段。先调用捕获阶段的处理函数,其次调用目标阶段的处理...

网友评论

      本文标题:事件流:捕获-目标-冒泡

      本文链接:https://www.haomeiwen.com/subject/mztbvftx.html