DOM API && 原生 JS 实现事件委托

2017-04-17  本文已影响54人  饥人谷_hak

学API通览API列表

MDN https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object_Model

w3schools https://www.w3schools.com/js/


document.documentElement //它返回根元素<html>

事件MouseEvrnt

<script>
 xxx.onclick = function(){
  console.log(this)
  console.log(arguments)
}
</script>

触发点击事件后在控制台打出的this是 id 为 xxx 的元素
QQ截图20170415121737.png
可以看到它的一个参数是MouseEvent
相当于浏览器 执行了 xxx.onclick.call(button,MouseEvent)

另一种写法就是

xxx.addEnventListener('click',function() {})

第一种写法会覆盖

xxx.onclick = function(){
console.log('1')
}

xxx.onclick = function() {
console.log('2')
}
2会覆盖1
所以要有升级版
addEnventlistener

事件通知

for (var i = 0 ;i < 6 ;i++) {
   xx.addEventListener('click',function(){
      console.log(i)
})
}

xx的click事件被执行时 , 控制台输出6个6 , 因为addEventListener , 每次循环 , addEventListener 就像let 一样 , 生成不同的 addEventListener

回调

只要不是你声明和你调用 , 这种都是回调

事件 : 冒泡 & 捕获

eventflow.png
child1.addEventListener('click' , function() {
    console.log('child')
})  

parent1.addEventListener('click' , function() {
     console.log('parent')
})

事件可以写boolean 参数 , true就是 捕获 , false就是 冒泡 , 默认false

target & currentTarget

pareventDefault()

阻止默认事件

stopPropagation()

停止冒泡

原生 JS 实现事件委托

<a href="https://developer.mozilla.org/zh-CN/docs/Web/Events">MDN事件列表</a>

事件委托的目的
1.减少监听器
2.监听动态内容

上一篇 下一篇

猜你喜欢

热点阅读