日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

解析:浏览器事件冒泡及事件捕获

發(fā)布時間:2023/12/20 HTML 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解析:浏览器事件冒泡及事件捕获 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天的效率有點奇葩,說高吧,一個上午做了不少事。說低吧,因為一個分布式的算法花了我不少時間,終于有點頭緒。估計明天會寫一篇文章來講述一下自己的看法。


而今天,還是回到前端。今天來說說事件冒泡和事件捕獲。首先肯定是概念:什么是事件冒泡?什么是事件捕獲?


簡單地說,事件冒泡和事件捕獲都是一種事件傳遞的機制。這種機制可以使事件在不同級的元素間傳遞。事件冒泡是從事件觸發(fā)的源節(jié)點,向父節(jié)點傳遞,直到到達最頂節(jié)點。而事件捕獲則是從最頂節(jié)點,逐步向下傳遞,直到到達事件觸發(fā)的源節(jié)點。


在一些標準的瀏覽器中,如Chrome、Firefox等,支持這兩種冒泡方式。而事實上,準確的說,是這兩種方式的混合方式。因為W3C采取的就是這兩種方式的結(jié)合:先從頂級節(jié)點開始,將事件向下傳遞至源節(jié)點,再從源節(jié)點冒泡至頂節(jié)點。


而在IE及Opera(以下說的都是老版本的歐朋,新版本的歐朋經(jīng)檢測是支持事件捕獲的)下,是不支持事件捕獲的。而這個特點最明顯體現(xiàn)在事件綁定函數(shù)上。


IE、Opera的事件綁定函數(shù)是attachEvent,而Chrome等瀏覽器則是addEventListener,而后者比前者的參數(shù)多了一個——這個參數(shù)是一個布爾值,這個布爾值由用戶決定,用戶若設(shè)為true,則該綁定事件以事件捕獲的形式參與,若為false則以事件冒泡的形勢參與。而這個參數(shù)在IE和Opera瀏覽器中是不存在的——根本原因是它們不支持事件捕獲。


下面我來提供一個例子讓大家更好地理解事件冒泡和事件捕獲(本來想用flex布局,后來想偷懶,所以還是算了,大家不要注意細節(jié)(*^__^*) 嘻嘻……):

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title></title><style>div {margin: 0 auto;}#ele1 {width: 500px;height: 500px;background: green;line-height: 500px;text-align: center;}#ele2 {width: 300px;height: 300px;line-height: 300px;background: blue;text-align: center;display: inline-block;vertical-align: middle;}#ele3 {width: 200px;height: 200px;background: red;display: inline-block;vertical-align: middle;}</style> </head> <body><div id="ele1"><div id="ele2"><div id="ele3"></div></div></div><a id="test" href="http://baidu.com/">click</a><script type="text/javascript">window.onload = function() {var e1 = document.getElementById('ele1');var e2 = document.getElementById('ele2');var e3 = document.getElementById('ele3');var link = document.getElementById('test');e1.addEventListener('click',function(evt) {console.log('ele1-click');},true);e2.addEventListener('click',function(evt) {console.log('ele2-click');});e3.addEventListener('click',function(evt) {console.log('ele3-click');evt.stopPropagation();});link.addEventListener('click',function(evt) {console.log('^_^,I have stopped it!')evt.preventDefault();});};</script> </body> </html>
可以留意到,我在例子中還增加了一個preventDefault的例子,因為我看到網(wǎng)上許多文章都把它和stopPropagation放在一起討論,所以這里也讓大家了解一下。

總結(jié)

以上是生活随笔為你收集整理的解析:浏览器事件冒泡及事件捕获的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。