《DOM事件和事件委托》

37 阅读1分钟

DOM事件

捕获与冒泡

  • 捕获:从外到内找监听函数,叫事件捕获
  • 冒泡:从内到外找监听函数,叫事件冒泡

同时支持两种调用顺序,先捕获,再冒泡

事件绑定api(addEventListener)

  • div.addEventListener('click',fn,boll)
    • 如果布尔不传或为false,就让fn走冒泡,即当前浏览器在冒泡阶段发现div有fn监听函数,就会调用fn,并提供事件信息。
    • 如果布尔为true,就让fn走捕获,即当前浏览器在捕获泡阶段发现div有fn监听函数,就会调用fn,并提供事件信息。

target VS currentTarget

  • target:用户操作的元素
  • currentTarget:程序员监听的元素

取消冒泡(stopPropagation)

  • 语法:event(事件).stopPropagation()
  • 可中断冒泡,浏览器不再向上走,一般用于封装独立的组件。

有些事件不能取消冒泡(如:scroll event)

52886d9cbabaf7290a3c8a3843053be.png

取消事件默认动作(preventDefault())

语法:event.preventDefault()

如何组织滚动(scroll)

  1. 阻止scroll的默认动作
  2. 用css隐藏滚动条

自定义事件

1663751717(1).png

事件委托

把原本绑定在子元素上得响应事件委托给父元素,让父元素担当监听的职务

例1:给100个按钮添加点击事件

监听100个按钮的祖先,等冒泡的时候判断target是否是100个按钮中的一个 image.png

例2:监听目前不存在的元素的点击事件

监听祖先,点击时查看是不是我想监听的元素 24a7f9795868b4ab9c2012b964aa088.png