欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于事件捕获,事件冒泡以及事件委托

程序员文章站 2022-05-06 09:10:37
...

ps.不谈兼容性

现代浏览器中事件是以从上到下然后从下再返回到上的,从上到下的过程叫做事件捕获,从下到上的过程叫做事件冒泡

关于事件捕获,事件冒泡以及事件委托

想要指定在哪个阶段触发指定函数,需要在addEventener函数中添加第三个参数,它是一个Boolean值。

true时为在捕获阶段触发回调,false时在冒泡阶段触发回调,默认值为false。


//html
   <div class="wapper">
        <div class="child">
            ABCDEF
        </div>
    </div>
//js
      var wapper=document.querySelector('.wapper'),child=document.querySelector('.child');
       window.addEventListener('click',(e)=>{
           console.log('window 捕获');
       },true)
       window.addEventListener('click',(e)=>{
           console.log('window 冒泡');
       },false)
       document.addEventListener('click',(e)=>{
           console.log('document 捕获');
       },true)
       document.addEventListener('click',(e)=>{
           console.log('document 冒泡');
       },false)
       wapper.addEventListener('click',(e)=>{
           console.log('wapper 捕获');
       },true)
       wapper.addEventListener('click',(e)=>{
           console.log('wapper 冒泡');
       },false)
       child.addEventListener('click',(e)=>{
           console.log('child 捕获');
       },true)
       child.addEventListener('click',(e)=>{
           console.log('child 冒泡');
       },false)
输出:
       window 捕获
       document 捕获
       wapper 捕获
       child 捕获
       child 冒泡
       wapper 冒泡
       document 冒泡

事件传递的过程就像是在玩弹力球,扔下去依次碰到挡板,弹回来时再次碰到挡板,在事件函数中触发stopPropagation()就像是给挡板加上强力胶,让弹力球停在那里不能上也不能下。原本你打算接到球以后就把它放到口袋里,但是在函数中触发preventDefault()就像是让你接到球以后什么也不做。

stopPropagation会中断事件的继续传递。

preventDefault会阻止默认触发的浏览器事件(比如a标签点击后的跳转)


事件委托是一种优化策略,因为在监听的同级元素太多又非常重复的时候,可以在父上添加监听。

在传递事件的event中有个target对象,它一般为真正触发事件的元素,也就是事件传递过程中的最底层对象,通过这个对象可以知道到底谁触发的,分析出它的信息是什么,所以在父级添加通过分析信息来触发不同的函数,可以达到性能的优化,不用重复的添加多余的事件监听。而且监听子元素的时候,父级在事件链中本来就一定会被触发。




相关标签: Javascript