国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

事件冒泡和傳播

wenshi11019 / 2101人閱讀

摘要:事件冒泡和傳播舉栗子事件輸出事件有兩種,一種為事件傳播,一種是事件冒泡事件傳播和事件冒泡這還要從遙遠(yuǎn)的荒誕說起,兩家網(wǎng)景和,為了能爭(zhēng)奪市場(chǎng),互相使用相反的技術(shù),當(dāng)網(wǎng)景使用事件傳播的時(shí)候,使用事件冒泡。

事件冒泡和傳播
舉栗子
事件輸出hello world
事件有兩種,一種為事件傳播,一種是事件冒泡

事件傳播和事件冒泡

這還要從遙遠(yuǎn)的荒誕說起,兩家網(wǎng)景和ie,為了能爭(zhēng)奪市場(chǎng),互相使用相反的技術(shù),當(dāng)網(wǎng)景使用事件傳播的時(shí)候,ie使用事件冒泡。(兩個(gè)正好相反)這個(gè)時(shí)候w3c來了,為了能規(guī)范規(guī)定,直接取折中,當(dāng)事件發(fā)生時(shí),先發(fā)生向下傳播,當(dāng)?shù)降琢艘院笤俅问褂檬录芭荩饾u的冒泡到頂層window

DOM為一個(gè)完整的樹
使用事件傳播輸出hello world

html如下

 

  
      
      
    Hello world
  
  
    
點(diǎn)擊這里

css如下

* {
    margin:0;
    padding:0;
    border:0;
}

#div1 {
    width:300px;
    height:300px;
    background:#c7e0d9;
    position:relative;
}

#div2 {
    width:100px;
    height:100px;
    background:#8ac3d8;
    position:absolute;
    left:0;
    top:0;
    right:0;
    bottom:0;
    margin:auto;
    text-align:center;
    line-height:100px;
}

顯示的效果如下

下面書寫js

冒泡

先使用冒泡

// 獲取元素
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
var div3 = document.getElementById("div3");

// 綁定事件
// 當(dāng)單擊外部方框的時(shí)候
div1.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是外框!");
}, false);
div2.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是內(nèi)框");
}, false);
div3.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是文字");
}, false);

當(dāng)為false的時(shí)候?yàn)槊芭荨7駝t為事件傳播

冒泡為上,事件傳播為下,事件傳播優(yōu)于事件冒泡

可以明確的知道,此時(shí)為false為冒泡,即全部向上傳播,這個(gè)比較簡單不在闡述

阻止進(jìn)一步冒泡
// 獲取元素
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
var div3 = document.getElementById("div3");

// 綁定事件
// 當(dāng)單擊外部方框的時(shí)候
div1.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是外框!");
}, false);
div2.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是內(nèi)框");
    event.stopPropagation();    // 阻止該事件進(jìn)一步傳播
}, false);
div3.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是文字");
}, false);

js如上,在div2內(nèi)部使用event.stopPropagation()阻止進(jìn)一步冒泡
結(jié)果如下

可以看到明顯的被阻擋

傳播

傳播方向更冒泡相反,為向下,且傳播優(yōu)先于冒泡
并且事件先進(jìn)行向上傳,直到遇到設(shè)置為冒泡的元素的時(shí)候,停止向上傳,開始進(jìn)行從上到下的捕獲,先最外層捕獲,然后逐層捕獲,直到完成。

// 獲取元素
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
var div3 = document.getElementById("div3");

// 綁定事件
// 當(dāng)單擊外部方框的時(shí)候
div1.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是外框!");
}, true);
div2.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是內(nèi)框");
}, true);
div3.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是文字");
}, true);

傳播優(yōu)先于冒泡

js如下

// 獲取元素
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
var div3 = document.getElementById("div3");

// 綁定事件
// 當(dāng)單擊外部方框的時(shí)候
div1.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是外框!");
}, false);
div2.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是內(nèi)框");
}, true);
div3.addEventListener("click", () => {
    alert("hello world! 你點(diǎn)擊的是文字");
}, true);

演示

ps: 最近在寫gitchat 有點(diǎn)慢

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96888.html

相關(guān)文章

  • 你不知道的javascript事件

    摘要:然而和分別提出了完全相反的的概念事件冒泡和事件捕獲。所有的節(jié)點(diǎn)中包含了這兩個(gè)方法,它們都接受個(gè)參數(shù)要處理的事件名作為事件處理程序的函數(shù)和一個(gè)布爾值。事件流級(jí)事件規(guī)定的事件流包括三個(gè)階段事件捕獲階段處于目標(biāo)階段事件冒泡階段。 事件流描述的是從頁面中接受事件的順序。然而ie和netscape分別提出了完全相反的的概念:事件冒泡和事件捕獲。下面就說說這兩種事件流: 事件冒泡 事件冒泡,就是說...

    imtianx 評(píng)論0 收藏0
  • 你不知道的javascript事件

    摘要:然而和分別提出了完全相反的的概念事件冒泡和事件捕獲。所有的節(jié)點(diǎn)中包含了這兩個(gè)方法,它們都接受個(gè)參數(shù)要處理的事件名作為事件處理程序的函數(shù)和一個(gè)布爾值。事件流級(jí)事件規(guī)定的事件流包括三個(gè)階段事件捕獲階段處于目標(biāo)階段事件冒泡階段。 事件流描述的是從頁面中接受事件的順序。然而ie和netscape分別提出了完全相反的的概念:事件冒泡和事件捕獲。下面就說說這兩種事件流: 事件冒泡 事件冒泡,就是說...

    marek 評(píng)論0 收藏0
  • 瀏覽器事件模型中捕獲階段、目標(biāo)階段、冒泡階段實(shí)例詳解

    摘要:目標(biāo)階段真正點(diǎn)擊的元素的事件發(fā)生了兩次,因?yàn)樵谏厦娴拇a中,既在捕獲階段綁定了事件,又在冒泡階段綁定了事件,所以發(fā)生了兩次。所以很明顯用直接綁定的事件發(fā)生在了冒泡階段。 如果對(duì)事件大概了解,可能知道有事件冒泡這回事,但是冒泡、捕獲、傳播這些機(jī)制可能還沒有深入的研究實(shí)踐一下,我抽時(shí)間整理了一下相關(guān)的知識(shí)。 本文主要對(duì)事件機(jī)制一些細(xì)節(jié)進(jìn)行討論,過于基礎(chǔ)的事件綁定知識(shí)方法沒有介紹。 特別少...

    mylxsw 評(píng)論0 收藏0
  • JavaScript捕獲冒泡探討

    摘要:上個(gè)星期在微博中一個(gè)關(guān)于捕獲和冒泡代碼的討論,可能沒有動(dòng)手實(shí)現(xiàn)一篇的人無法給出確定的答案。目標(biāo)階段事件對(duì)象到達(dá)其事件目標(biāo)。在此階段注冊(cè)的事件監(jiān)聽器會(huì)對(duì)相應(yīng)的冒泡事件進(jìn)行處理。 上個(gè)星期在微博中一個(gè)關(guān)于javascript捕獲和冒泡代碼的討論,可能沒有動(dòng)手實(shí)現(xiàn)一篇的人無法給出確定的答案。 這里再來回顧一下之前的三條微博。 事件的執(zhí)行順序 JavaScript冒泡和捕獲考察題目看圖回答問題...

    caikeal 評(píng)論0 收藏0
  • JS專題之事件模型

    摘要:三事件流規(guī)定事件包括三個(gè)階段,事件捕獲,處于目標(biāo)階段事件冒泡。一起來看添加新增加的,點(diǎn)擊發(fā)現(xiàn)沒有反應(yīng),說明事件沒有綁定進(jìn)去,但是我們也并不想,每增加一個(gè)新元素,就為這個(gè)新元素綁定事件,重復(fù)低效率的工作應(yīng)當(dāng)避免去做。 本文共 1960 字,讀完只需 8 分鐘 事件 用戶與網(wǎng)頁交互是通過事件實(shí)現(xiàn)的,事件剛開始是作為分擔(dān)服務(wù)器負(fù)載的一個(gè)手段,起初沒有統(tǒng)一的規(guī)范,直到 DOM2 級(jí),網(wǎng)景和 I...

    W4n9Hu1 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<