亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

DOM標準事件的三個階段:冒泡、捕獲 dom事件三個階段

2024-04-27 15:19:02
字體:
來源:轉載
供稿:網友

本文主要解決兩個問題:

什么是事件流

DOM事件流的三個階段

起因

溫故了一下我的《javaScript高級程序設計》的時候,翻到DOM事件那一章,(說實話,現在無論是什么框架你都離不開操作DOM啊,畢竟這是你展示的最基本元素,就像人的細胞)。想起了dom事件流原理,好多人不明白,只知道click mouSEOut等實用場景,真要理解和更進一步的前端是要必須:理論+實踐 并行的。

當然,DOM事件所囊括的知識較為龐雜,所以本文專注與自己學習時所碰到的難點,DOM事件流。

流的概念,在現今的Javascript中隨處可見。比如說React中的單向數據流,Node中的流,又或是今天本文所講的DOM事件流。都是流的一種生動體現。至于流的具體概念,我們采用下文的解釋:

用術語說流是對輸入輸出設備的抽象。以程序的角度說,流是具有方向的數據。

事件流之事件冒泡與事件捕獲

在瀏覽器發展的過程中,開發團隊遇到了一個問題。那就是頁面中的哪一部分擁有特定的事件?

可以想象畫在一張紙上的一組同心圓,如果你把手指放在圓心上,那么你的手指指向的其實不是一個圓,而是紙上所有的圓。放到實際頁面中就是,你點擊一個按鈕,事實上你還同時點擊了按鈕所有的父元素。

開發團隊的問題就在于,當點擊按鈕時,是按鈕最外層的父元素先收到事件并執行,還是具體元素先收到事件并執行?所以這兒引入了事件流的概念。

事件流所描述的就是從頁面中接受事件的順序。

因為有兩種觀點,所以事件流也有兩種,分別是事件冒泡和事件捕獲?,F行的主流是事件冒泡。

事件冒泡

事件冒泡即事件開始時,由最具體的元素接收(也就是事件發生所在的節點),然后逐級傳播到較為不具體的節點。舉個栗子,就很容易明白了。

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Event Bubbling</title></head><body>  <button id="clickMe">Click Me</button></body></html>

然后,我們給 button 和它的父元素,加入點擊事件。

var button = document.getElementById('clickMe');button.onclick = function() {  console.log('1. You click Button');};document.body.onclick = function() {  console.log('2. You click body');};document.onclick = function() {  console.log('3. You click document');};window.onclick = function() {  console.log('4. You click window');};

效果如圖所示:

在代碼所示的頁面中,如果點擊了button,那么這個點擊事件會按如下的順序傳播(Chrome瀏覽器):

button

body

document

window

也就是說,click事件首先在 <button> 元素上發生,然后逐級向上傳播。這就是事件冒泡。

事件捕獲

事件捕獲的概念,與事件冒泡正好相反。它認為當某個事件發生時,父元素應該更早接收到事件,具體元素則最后接收到事件。比如說剛才的demo,如果是事件捕獲的話,事件發生順序會是這樣的:

window

document

body

button

當然,由于時代更迭,事件冒泡方式更勝一籌。所以放心的使用事件冒泡,有特殊需要再使用事件捕獲即可。

DOM事件流

DOM事件流包括三個階段。

事件捕獲階段

處于目標階段

事件冒泡階段

如圖所示(圖片源于網絡,若侵權請告知):

1. 事件捕獲階段

也就是說,當事件發生時,首先發生的是事件捕獲,為父元素截獲事件提供了機會。

例如,我把上面的Demo中,window點擊事件更改為使用事件捕獲模式。(addEventListener最后一個參數, 為true則代表使用事件捕獲模式 ,false則表示使用事件冒泡模式。不理解的可以去學習一下addEventListener函數的使用)

window.addEventListener('click', function() {  console.log('4. You click window');}, true);

此時,點擊button的效果是這樣的。

可以看到,點擊事件先被父元素截獲了,且該函數只在事件捕獲階段起作用。

處于目標與事件冒泡階段

事件到了具體元素時,在具體元素上發生,并且被看成冒泡階段的一部分。隨后,冒泡階段發生,事件開始冒泡。

阻止事件冒泡

事件冒泡過程,是可以被阻止的。防止事件冒泡而帶來不必要的錯誤和困擾。

這個方法就是: stopPRopagation() 

我們對 button 的click事件做一些改造。

button.addEventListener('click', function(event) {  // event為事件對象  console.log('1. You click Button');  event.stopPropagation();  console.log('Stop Propagation!');}, false);

點擊后,效果如下圖:

不難看出,事件在到達具體元素后,停止了冒泡。但不影響父元素的事件捕獲。

總結與感想

事件流:描述的就是從頁面中接受事件的順序。分有事件冒泡與事件捕獲兩種。DOM事件流的三個階段:

事件捕獲階段

處于目標階段

事件冒泡階段

在學習DOM事件的過程中,了解了DOM事件的三個階段,也知道事件冒泡是干啥用的,又如何阻止。配合前期所學的二叉樹的相關知識,受益匪淺。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久99久久精品女同性| 亚洲色图13p| 日韩专区在线播放| 中文字幕在线日韩| 日韩成人黄色av| 国产欧美日韩中文| 2020国产精品视频| 国产成人精品在线观看| 亚洲欧美中文日韩在线| 亚洲精品一区二三区不卡| 成人网在线视频| 国产成人一区三区| 亚洲aⅴ日韩av电影在线观看| 日韩电影中文字幕在线| 色黄久久久久久| 亚洲色图日韩av| 欧美成人高清视频| 亚洲国产婷婷香蕉久久久久久| 亚洲图片制服诱惑| 亚洲免费中文字幕| 美女久久久久久久久久久| 北条麻妃久久精品| 日韩专区在线观看| 欧美体内谢she精2性欧美| 日韩在线视频国产| 国产三级精品网站| 日韩精品免费视频| 日韩精品中文字幕视频在线| 欧美激情视频播放| 最新69国产成人精品视频免费| 777午夜精品福利在线观看| www.亚洲成人| 亚洲精品一区久久久久久| 91色p视频在线| 亚洲欧洲国产一区| 亚洲国产精品va| 91久久精品一区| 欧美多人乱p欧美4p久久| 日韩一级裸体免费视频| 久久精品国产一区二区三区| 久久久噜噜噜久久中文字免| 国产精品视频中文字幕91| 欧美精品一本久久男人的天堂| 成人免费自拍视频| 亚洲综合色激情五月| 国产精品伦子伦免费视频| 欧美日韩激情小视频| 久久99久久亚洲国产| 国产自产女人91一区在线观看| 91久久久久久久久久久| 95av在线视频| 国产第一区电影| 亚洲欧美成人一区二区在线电影| 欧洲美女7788成人免费视频| 久久久久久久久综合| 成人午夜在线观看| 精品福利樱桃av导航| 国产午夜精品全部视频在线播放| 久久精品99久久久香蕉| 97免费视频在线| 久久成人精品一区二区三区| 两个人的视频www国产精品| 成人性生交大片免费看视频直播| 亚洲午夜性刺激影院| 97超级碰碰碰久久久| 欧美成人精品一区二区| 成人妇女淫片aaaa视频| 992tv在线成人免费观看| 中文字幕日韩欧美在线| 成人福利在线视频| 久久天堂电影网| 国产精品无av码在线观看| 亚洲国产精品成人精品| 亚洲肉体裸体xxxx137| 欧美一级大片视频| 国产精品aaaa| 亚洲天堂一区二区三区| 日韩av一区二区在线| 一区二区福利视频| 色综合久久久888| 疯狂蹂躏欧美一区二区精品| 91久久精品在线| 久久久久久久久久久av| 国产一区二区三区三区在线观看| 日韩精品福利在线| 久久综合网hezyo| 91国在线精品国内播放| 日韩电影中文 亚洲精品乱码| 日本亚洲欧洲色α| 亚洲欧美另类国产| 久久久久久国产精品美女| 欧美电影《睫毛膏》| 亚洲综合在线中文字幕| 亚洲精品短视频| 久久久精品电影| 国内精品视频一区| 蜜月aⅴ免费一区二区三区| 一区二区三区国产在线观看| 日韩精品在线免费观看视频| 亚洲精品天天看| 精品美女国产在线| 中文字幕在线国产精品| 国产精品久久视频| 蜜臀久久99精品久久久无需会员| 伊人久久免费视频| 久久精品视频免费播放| 久久久久久久久久久人体| 欧美国产第一页| 欧美日韩一区二区精品| 亚洲午夜女主播在线直播| 久久久久久久久久久av| 久久久久久久久久久免费| 久久综合久久美利坚合众国| 日av在线播放中文不卡| 国产日韩欧美中文| 日韩一区在线视频| 欧美激情亚洲精品| 成人在线一区二区| 最近免费中文字幕视频2019| 57pao精品| 久久人人爽人人爽人人片av高清| 57pao成人国产永久免费| 插插插亚洲综合网| 97精品欧美一区二区三区| 91福利视频在线观看| 日本欧美黄网站| 国产精品福利网| 韩剧1988免费观看全集| 成人伊人精品色xxxx视频| 高清在线视频日韩欧美| 亚洲aⅴ日韩av电影在线观看| 亚洲精品www| 精品国内产的精品视频在线观看| 国产精品美女www爽爽爽视频| 国产一区二区激情| 91日韩在线播放| 视频一区视频二区国产精品| 久久久久久国产精品| 高清欧美电影在线| 欧美性xxxx极品高清hd直播| 亚洲天天在线日亚洲洲精| 亚洲**2019国产| 成人网中文字幕| 欧美性开放视频| 日本午夜人人精品| 日韩欧美亚洲成人| 亚洲精品国产精品国产自| 美女久久久久久久久久久| 国产有码在线一区二区视频| 亚洲人成网在线播放| 91成人国产在线观看| 亚洲精选中文字幕| 国产精品直播网红| 亚洲精品一区二区网址| 亚洲香蕉av在线一区二区三区| 黄色91在线观看| 日韩欧美国产成人| 国内精品久久久久久| 国产精品免费久久久久影院| 红桃视频成人在线观看| 中文欧美日本在线资源| 中日韩美女免费视频网站在线观看| 久久91亚洲精品中文字幕奶水| 国产人妖伪娘一区91|