一:js中常见得事件html
1 // 建立一个侦听事件 , 事件类型为 点击 click ,回调函数为clickHandler ,默认 冒泡 2 document.addEventListener('click',clickHandler) 3 4 // 事件回调函数的参数 MouseEvent - 鼠标事件 5 function clickHandler(e) { 6 console.log("我被点击了") 7 }
在上面得代码中侦听事件得对象为 document 就是网页,当咱们点击网页得任何一个位置就会触发点击事件,那么就会执行事件的回调函数 clickHandler,打印结果dom
1.2:删除事件 函数
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Document</title> 7 </head> 8 <body> 9 <button id="btn">按钮</button> 10 </body> 11 <script> 12 // 获取dom元素 13 var btn = document.querySelector('#btn') 14 // 侦听事件 15 btn.addEventListener('click',clickHandler1) 16 // 事件回调函数 17 var num = 0 18 function clickHandler1(e){ 19 num++ 20 console.log('当num > 3 得时候删除事件') 21 if (num>3){ 22 // 删除事件 23 e.currentTarget.removeEventListener('click',clickHandler1) 24 } 25 } 26 </script> 27 </html>
当咱们不断点击按钮,就会不断的触发事件,每点击一次 num 的值就会增长,当num大于3时,就删除本次建立的事件和事件回调函数,为何要删除事件呢?由于当元素的事件再也不使用时,必须删除,不然会形成内存堆积,侦听事件都会被存储在堆中,当元素被删除了,也必须删除该元素的全部事件。spa
2:事件侦听 与 抛发 code
事件侦听语法 : 事件侦听对象.addEventListener(事件类型,事件回调函数,是否捕获时执行)htm
建立事件对象语法:var evt = new Event(事件类型) -指建立一个事件对象对象
1 // 侦听事件 2 document.addEventListener('奥里给',customHandler) 3 // 建立一个事件对象 4 var evt = new Event('奥里给') 5 // 抛发事件 6 document.dispatchEvent(evt) 7 // 事件回调函数 8 function customHandler(e) { 9 console.log(e.type) //e.type 查看事件的类型
10 }
1 // 获取 标签 2 var div0 = document.querySelector('.div0') // 绿色背景块 3 var div1 = document.querySelector('.div1') // 浅粉色块 4 var div2 = document.querySelector('.div2') // 红色块 5 6 // 给每一个块都添加点击事件 7 div0.addEventListener('click',clickHandler0) 8 div1.addEventListener('click',clickHandler1) 9 div2.addEventListener('click',clickHandler2) 10 function clickHandler0(e){ 11 console.log('点击div0') 12 } 13 14 function clickHandler1(e){ 15 console.log('点击div1') 16 17 } 18 19 function clickHandler2(e){ 20 console.log('点击div2') 21 }
当咱们在点击红色块时,咱们会发现,div1和div2都被打印了,这就是事件的冒泡,咱们点击的真正目标为红色块div2,可是却触发了其余两个块,那么事件如何进行三阶段的呢? 首先当咱们点击红色块div2时,事件进入一阶段,捕获阶段,他会先进入div0,查找目标,当没有发现,会进入下一层查找目标,当进入粉丝块时,也没有发现咱们想要的目标,当进入红色块div2 时,就会找到咱们点击的目标,div2,这个时候事件的一阶段就变成了二阶段,目标阶段,就会开始向外发送信息触发事件,执行事件回调函数,并由二阶段变成三阶段,冒泡阶段,这时是由内向外的一个过程,不断的往外并触发通过的块的事件,直到最外层,这就是事件三阶段的全过程。那么咱们可不可让他不冒泡呢,有 blog
1 div0.addEventListener('click',clickHandler0) 2 div1.addEventListener('click',clickHandler1) 3 div2.addEventListener('click',clickHandler2) 4 function clickHandler0(e){ 5 console.log('点击div0') 6 7 } 8 9 function clickHandler1(e){ 10 console.log('点击div1') 11 12 } 13 14 function clickHandler2(e){ 15 e.stopPropagation() // 阻止事件冒泡 16 console.log('点击div2') 17 18 }