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)
取消事件默认动作(preventDefault())
语法:event.preventDefault()
如何组织滚动(scroll)
- 阻止scroll的默认动作
- 用css隐藏滚动条
自定义事件
事件委托
把原本绑定在子元素上得响应事件委托给父元素,让父元素担当监听的职务
例1:给100个按钮添加点击事件
监听100个按钮的祖先,等冒泡的时候判断target是否是100个按钮中的一个
例2:监听目前不存在的元素的点击事件
监听祖先,点击时查看是不是我想监听的元素