為什么要使用事件代理情连?
抽取相同的事件處理函數(shù)或者是對(duì)象,提高程序的工作效率。
添加到頁(yè)面上的事件處理程序數(shù)量將直接關(guān)系到頁(yè)面的整體運(yùn)行性能挺狰,因?yàn)樾枰粩嗟呐cdom節(jié)點(diǎn)進(jìn)行交互身隐,訪問(wèn)dom的次數(shù)越多廷区,引起瀏覽器重繪與重排的次數(shù)也就越多,就會(huì)延長(zhǎng)整個(gè)頁(yè)面的交互就緒時(shí)間贾铝,這就是為什么性能優(yōu)化的主要思想之一就是減少DOM操作的原因隙轻;如果要用事件委托,就會(huì)將所有的操作放到j(luò)s程序里面忌傻,與dom的操作就只需要交互一次大脉,這樣就能大大的減少與dom的交互次數(shù),提高性能水孩;
每個(gè)函數(shù)都是一個(gè)對(duì)象镰矿,是對(duì)象就會(huì)占用內(nèi)存,對(duì)象越多俘种,內(nèi)存占用率就越大秤标,自然性能就越差了。
什么是事件代理宙刘?
事件委托實(shí)際上是使用了事件冒泡的原理:從事件最深層的節(jié)點(diǎn)開始苍姜,逐步向上傳播事件。
將不好完成的事件交給另一方完成悬包。經(jīng)常使用的是為了提高性能衙猪,將子對(duì)象的事件提交給父對(duì)象,根據(jù)冒泡原理布近,讓父對(duì)象完成垫释,減少相應(yīng)的dom操作。
事件委托最好用的地方在于撑瞧,新添加的子節(jié)點(diǎn)棵譬,由于是冒泡向父節(jié)點(diǎn)來(lái)完成事件,不用再單獨(dú)給子節(jié)點(diǎn)添加事件或是改變?cè)械膁om結(jié)構(gòu)预伺。
ps:如何尋找事件源
js提供了target函數(shù)來(lái)指向事件源订咸。
function getEventTarget(e) {
e = e || window.event;
vartarget = ev.target ||ev.srcElement曼尊;
}