什么是事件委托?
利用事件的冒泡传播机制,我们把当前元素事件触发要做的事情,全部委托给外层 容器,这样触发当前元素的某个事件行为,其外层容器(祖先元素)的相关事件行 为也会被触发,再给外层容器事件触发绑定的方法中,基于事件源不同,处理要做 的不同的事情 。
事件委托优点有哪些?
-
性能很好(比一般的事件绑定性能提高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来判断点击了哪个容器,然后再处理相应的事情。