目录 § ⇧
- 1. 点击事件 §
- 2.
addEventListener§ - 3.
targetV.S.currentTarget§ - 4. 取消冒泡 §
- 5. 不可取消冒泡的事件 §
- 6. 阻止滚动 §
- 7. 自定义事件 §
- 8. 事件委托(事件代理) §
- 9. 封装事件委托 §
- 10. $3 §
- 11. $3 §
1. 点击事件 § ⇧
有三个div,.爷爷>.爸爸>.儿子
给三个div分别添加事件监听,
fnYe/fnBa/fnEr1 2 3 4 5 6 7<div class="爷爷"> <div class="爸爸"> <div class="儿子"> 文字 </div> </div> </div>点击文字,同时算点击了儿子、爸爸、爷爷
点击文字,事件的调用顺序
W3C制定浏览器标准需同时支持两种调用顺序
首先按爷爷->爸爸->儿子顺序查找函数监听,从外向内,找监听函数,叫事件捕获
然后按儿子->爸爸->爷爷顺序查找函数监听,从内向外,找监听函数,叫事件冒泡
有监听函数就调用,并提供事件信息,没有就跳过
可选择间监听的函数放在捕获阶段还是冒泡阶段调用
2.addEventListener § ⇧
2.1 事件绑定API
element.addEventListener('click', fn, boolean)冒泡
如果bool不传或为falsy
- 就让fn走冒泡,即当浏览器在冒泡阶段发现节点有fn监听函数,就会调用fn,并提供事件信息
- 即监听函数默认走冒泡
如果bool为true
- 就让fn走捕获, 即当浏览器在捕获阶段发现节点有fn监听函数,就会调用fn,并提供信息
你可以选择吧fn放在哪边
- 如果bool为true,fn就放在左边,右边空跑
- 如果bool为空或falsy,fn就放在右边,左边空跑
代码示例
|
|
|
|
|
|
事件结束后,e 还在?
- 答案并不是「在」,也不是「不在」
- e 只是没了
currentTarget: null,其他属性都还「健在」 - 动作结束,事件结束,e 会被浏览器悄悄改变
- 不推荐在事件结束后访问 e
把属性复制到自己的变量里再使用,比如
const tempEvent = e.currentTarget就是把 currentTarget 的引用复制到 tempEvent1 2 3 4 5 6 7 8 9 10 11const $ = document.querySelector.bind(document) const [lv1, lv2, lv3, lv4, lv5, lv6, lv7] = [$('.lv1'), $('.lv2'), $('.lv3'), $('.lv4'), $('.lv5'), $('.lv6'), $('.lv7')] let n = 1 console.log(lv1) lv1.addEventListener('click', (e) => { const tempEvent = e.currentTarget setTimeout(() => { tempEvent.classList.remove('x'); }, n * 1000) n += 1 })
循环监听事件
|
|