您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“js中的事件對象、事件源對象和事件流實(shí)例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“js中的事件對象、事件源對象和事件流實(shí)例分析”吧!
事件對象(event)
什么是事件:事件就是指js中所有可以發(fā)生的有并且有監(jiān)聽的事件,比如:(鼠標(biāo)、鍵盤以及瀏覽器窗口變化等)
是什么是事件對象(event):通俗講就是一個(gè)記錄了事件各種信息的一個(gè)對象。
這里需要注意的是:事件對象會(huì)有兼容性問題,在除IE的瀏覽器中為event,而非瀏覽器中為window.event,
btn.onclick = function(event){let e = event || window.event}
事件源對象
簡單來說,就是指事件具體是在那個(gè)對象上發(fā)生的,對于element元素來說,事件源對象就是指你所點(diǎn)擊的元素。同樣存在瀏覽器兼容問題:
在fireFox中為event.srcElement
在IE中為event.target
兼容寫法參照事件對象
事件流
事件流主要分為兩類:1.捕獲事件 2.冒泡事件 觸發(fā)順序是先捕獲在冒泡
但是如果細(xì)分的話在捕獲到冒泡階段會(huì)存在一個(gè)目標(biāo)階段,即所具體操做的dom元素要進(jìn)行的操作階段
捕獲事件
先由最上一級的節(jié)點(diǎn)先接收事件,然后向下傳播到具體的節(jié)點(diǎn)。eg:當(dāng)用戶點(diǎn)擊了p元素,采用事件捕獲,則click事件將按照document>htm>body>p的順序進(jìn)行傳播。傳遞方式是由外向內(nèi)傳遞。
冒泡事件
和捕獲事件相反,它是由內(nèi)向外傳遞,當(dāng)用戶點(diǎn)擊p時(shí)它會(huì)向父級傳遞,p>body>html。***由于這種特性常常用于事件委托。
事件委托
我們將所有子元素要觸發(fā)的相同事件綁定到父元素身上,這樣可以減少對DOM操作提高性能。具體使用方法是使用事件源對象的方法。
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul>
要對li綁定點(diǎn)擊事件,通常我們的做法是循環(huán)給li田間點(diǎn)擊事件
let oLi = document.querySelectorAll("li") for(let i; i < oLi.length; i++){ oLi[i].onclick = function(){ console.log("i") } }
而使用事件委托的方法是
let oUl = document.querySelector("ul") oUl.onclick = function(event){ let e = event || window.event console.log(e.target.innerHTML) }
優(yōu)點(diǎn)
提高性能,不需要循環(huán)所有元素一個(gè)一個(gè)綁定事件。
靈活,有動(dòng)態(tài)創(chuàng)建進(jìn)來的新元素不需要重新綁定事件。
阻止事件冒泡和阻止默認(rèn)事件
阻止事件冒泡的操作(兼容性寫法)
***有些事件不需要進(jìn)行冒泡操作
function stopBubble(event){ var e = event||window.event //事件對象兼容寫法 e.stopProgation() ? e.stopProgation() : e.cancelBubble = true //IE兼容寫法}
阻止默認(rèn)事件(兼容寫法)
***阻止a標(biāo)簽以及鼠標(biāo)右鍵默認(rèn)跳轉(zhuǎn)和菜單事件
function cancelHandle(event){ var e = event||window.event e.preventDefault() ? e.preventDefault() : e.returnValue = false/*ie*/}
到此,相信大家對“js中的事件對象、事件源對象和事件流實(shí)例分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。