事件委托

157 阅读1分钟

什么是事件委托?

利用事件的冒泡传播机制,我们把当前元素事件触发要做的事情,全部委托给外层                  容器,这样触发当前元素的某个事件行为,其外层容器(祖先元素)的相关事件行                    为也会被触发,再给外层容器事件触发绑定的方法中,基于事件源不同,处理要做                    的不同的事情 。

事件委托优点有哪些?

  • 性能很好(比一般的事件绑定性能提高40%以上,尤其需要单独绑定的元素越多,性能越好);如项目中遇到,一个容器中很多元素的某个行为触发要做一些事情,此时杜绝一个个的绑定,直接基于事件委托处理(Vue项目中也一样) 

  • 灵活,基于阻止冒泡传播,可以灵活控制哪些走事件代理,哪些不需要走 

  • 某些需求必须基于事件委托来实现:例如点击A/B做什么,剩下不管点击谁都统一做什么...  

    案例: css=> #outer{ margin: 20px auto; width:300px; height: 300px; background-color: red; } #inner{ margin: 20px auto; width: 200px; height: 200px; background-color: green; } #center{ margin: 20px auto; width: 100px; height: 100px; background-color: blue; } html=>

    javascript=>document.body.onclick=function (ev){ let target=ev.target, id=target.id; if(id==='outer'){ console.log("OUTER"); return; } if(id==='inner'){ console.log("INNER"); return; } console.log("什么也没点");}center.onclick=function(ev){ console.log('CENTER') ev.stopPropagation(); }

该案例中利用了事件委托,不需要为每个容器都绑定事件,只需要为body绑定事件即可,可以通过ev.target来判断点击了哪个容器,然后再处理相应的事情。