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

資訊專欄INFORMATION COLUMN

DOM事件之捕獲、冒泡

馬忠志 / 631人閱讀

摘要:隊(duì)列的實(shí)質(zhì)是數(shù)組。事件在默認(rèn)執(zhí)行的過程中是先捕獲后冒泡,第三個(gè)參數(shù)只是讓它在什么狀態(tài)下觸發(fā)。用方法,綁定的其他事件也將不會(huì)執(zhí)行。

DOM 0 知識(shí)點(diǎn)



     //是對(duì)的
    //是對(duì)的

HTML 中onclick = "要執(zhí)行的代碼",一旦用戶點(diǎn)擊,瀏覽就eval("要執(zhí)行的代碼"),這里不是屬性,不是函數(shù),是一段代碼。
JavaScript 中,一旦用戶點(diǎn)擊,瀏覽器就執(zhí)行X.onclick.call(X,{}),意思是onclick是一個(gè)函數(shù)屬性,而print是一個(gè)屬性,因?yàn)樗念愋褪菍?duì)象;但下面的print()的類型是undefined。
所以在HTML 中必須傳遞一個(gè)要執(zhí)行的代碼,JavaScript 中必須傳遞一個(gè)函數(shù)

DOM 2 知識(shí)點(diǎn)

那它們兩個(gè)的區(qū)別是啥呢?
xxx.onclick = function(){}只是一個(gè)屬性,所以它是唯一的,如果這時(shí)候你要綁定2個(gè)onclick事件就麻煩了。
xxx.addEventListener()它是一個(gè)隊(duì)列,先進(jìn)先出,就是說先綁定的先觸發(fā)。所以它叫做事件監(jiān)聽隊(duì)列,這里是排隊(duì),xxx擁有一個(gè)隊(duì)列叫做eventlisteners,你不能直接訪問它,但你可以通過addEventListener去排個(gè)隊(duì),如果用戶點(diǎn)擊了,就先觸發(fā)排在第一位的函數(shù),排在后面的一次觸發(fā)。隊(duì)列的實(shí)質(zhì)是數(shù)組。既然有入隊(duì),那是不是也有出隊(duì):

function f1(){
    console.log(1);
}

function f2(){
    console.log(2);
}

function f1(){
    console.log(3);
}

xxx.addEventListener("click",f1);
xxx.addEventListener("click",f2);
xxx.removeEventListener("click",f1);
xxx.addEventListener("click",f3);
xxx.removeEventListener("click",f3);

最后的結(jié)果就是打?。?。
f1 在排隊(duì)的過程中移除了,f3 剛進(jìn)入隊(duì)列就移除了。

前面寫輪播的時(shí)候用了one事件,它內(nèi)部是怎樣的呢?

function f1(){
    console.log(1);
    xxx.removeEventListener("click",f1);
}
xxx.addEventListener("click",f1);

one在函數(shù)處理時(shí)的最后一句加上離開隊(duì)列語句,on就是沒有出隊(duì)這句的,也就是說一直會(huì)執(zhí)行。

JS事件中的冒泡和捕獲

捕獲事件:事件從最外層父元素到最里層子元素的順序觸發(fā),叫做捕獲事件,果document > html > body > div > p > button

冒泡事件:正好和捕獲事件相反,事件從最里層子元素到最外層父元素的順序觸發(fā),叫做冒泡事件,如:button > p > div > body > html > document

DOM 2 中規(guī)定了同時(shí)支持捕獲事件和冒泡事件,用addEventListener()方法綁定一個(gè)事件處理函數(shù),其語法:
target.addEventListener(type, listener, useCapture);
type:表示監(jiān)聽事件類型的字符串,如clcik,前面沒有on
listener:表示監(jiān)聽的對(duì)象或者一個(gè)函數(shù)
useCapture:表示是否使用捕獲,接受一個(gè)布爾值,true是觸發(fā)捕獲事件,不寫默認(rèn)false觸發(fā)用冒泡事件。

事件在默認(rèn)執(zhí)行的過程中是先捕獲后冒泡,第三個(gè)參數(shù)只是讓它在什么狀態(tài)下觸發(fā)。如果一個(gè)節(jié)點(diǎn)捕獲和冒泡事件同時(shí)存在,誰在前誰先執(zhí)行,和事件無關(guān)。

s1
s2

當(dāng)我點(diǎn)擊在s2上面,觸發(fā)順序是s1捕獲事件 > s2冒泡事件 > s2捕獲事件 > s1冒泡事件

事件代理:事件會(huì)在冒泡階段向上傳播到父節(jié)點(diǎn),因此可以把子節(jié)點(diǎn)的監(jiān)聽函數(shù)定義在父節(jié)點(diǎn)上,由父節(jié)點(diǎn)的監(jiān)聽函數(shù)統(tǒng)一處理多個(gè)子元素的事件。這種方法叫做事件的代理(delegation)。

  • red
  • yellow
  • blue
  • green
  • black
  • white

來看一個(gè)具體例子:獲取li里面的文本,用事件流方法

var ul = document.querySelector("ul");
ul.addEventListener("click",showColor,false);
function showColor(e){
    var x = e.target;
    if(x.nodeName.toLowerCase() === "li"){
        console.log("The color is " + x.innerHTML);
    }
}

如果不使用事件代理,要獲取li里面的文本應(yīng)該怎么弄呢?老方法是獲取到所有子元素li,遍歷它就可以了

var colors = color-list.children
for(var i=0;i

阻止事件不再傳播,可以使用事件對(duì)象的stopPropagation()方法,但不會(huì)徹底消除事件,如果說綁定多個(gè)事件的話。
stopImmediatePropagation()方法,綁定的其他事件也將不會(huì)執(zhí)行。

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

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

相關(guān)文章

  • javascript 事件

    摘要:處于目標(biāo)階段事件在上發(fā)生并處理。冒泡階段事件又傳播回文檔。不支持捕獲事件的??偨Y(jié)二使用事件委托新添加的元素還會(huì)有之前的事件。事件對(duì)象在觸發(fā)某個(gè)事件時(shí),會(huì)產(chǎn)生一個(gè)事件對(duì)象。 js 是采用異步事件驅(qū)動(dòng)的機(jī)制來響應(yīng)用戶操作的,也就是說當(dāng)用戶對(duì)某個(gè)html元素進(jìn)行操作的時(shí)候,會(huì)產(chǎn)生一個(gè)事件,該事件會(huì)驅(qū)動(dòng)某些函數(shù)來處理。事件源:產(chǎn)生事件的地方(html元素,窗口,其他等等);事件:鼠標(biāo)事件,鍵盤...

    Forest10 評(píng)論0 收藏0
  • 原生jsDOM事件相關(guān)

    摘要:而由于級(jí)標(biāo)準(zhǔn)中并沒有定義事件相關(guān)的內(nèi)容,所以事件級(jí)別只包括級(jí),級(jí)和級(jí)三種。此屬性返回當(dāng)前事件所綁定的對(duì)象。自定義事件可以綁定到任意元素上,此處選擇只是為了演示方便。 前端學(xué)習(xí)的東西有很多,現(xiàn)代前端開發(fā),前端工程化的東西要懂,基礎(chǔ)的原生js也要懂,畢竟,框架都是有生命周期的,更替非???,然而卻有這么一個(gè)框架,它是最輕量的前端框架,每個(gè)瀏覽器都內(nèi)置,它叫vanilla.js。好吧,其實(shí)va...

    learning 評(píng)論0 收藏0
  • JavaScript系列事件詳解

    摘要:響應(yīng)某個(gè)事件的函數(shù)就叫事件處理程序或事件偵聽器。為事件指定事件處理程序的方法主要有種。事件處理程序事件直接加在元素上。事件委托利用冒泡的原理,把事件加到父元素或祖先元素上,觸發(fā)執(zhí)行效果,解決事件處理程序過多問題。事件委托優(yōu)點(diǎn)提高性能。 JavaScript簡(jiǎn)單入門可以看看我丑丑的Github博客JavaScript簡(jiǎn)單入門 事件 JavaScript與HTML之間的交互是通過事件實(shí)現(xiàn)的...

    pakolagij 評(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)頁(yè)交互是通過事件實(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元查看
<