每日一更--addEventListener參數(shù)設(shè)置

前言

今日2020年4月7日剧辐,敲完代碼有點(diǎn)疲勞寒亥,去看了下b站的前端代碼。發(fā)現(xiàn)有個(gè)font-size自適應(yīng)的js荧关,里面有addEventListener方法溉奕,剛好前段時(shí)間看到關(guān)于addEventListener的參數(shù)的考題,查了下資料忍啤,做此總結(jié)加勤。

正文

addEventListener事件監(jiān)聽

事件監(jiān)聽有3個(gè)參數(shù)(官方api):
網(wǎng)上有人說遇到事件監(jiān)聽有5個(gè)參數(shù)的(參考資料里有5個(gè)參數(shù)),我查了下資料檀轨,第四個(gè)和第五個(gè)參數(shù)的資料基本是2012左右的胸竞,可能是后面優(yōu)化了欺嗤,不過多了解下總歸沒錯(cuò)参萄。

addEventListener(
    type:String, 
    listener:Function, 
    useCaputer:Boolean(default:false),
    priority:int(default:0),
    useWeakReference:boolean (default:false)
)
// 第一個(gè)參數(shù)type:是監(jiān)聽類型,包括click,pressdown,mouseover等各類你能想象到的操作事件

// 第二個(gè)參數(shù)listener:是你在監(jiān)聽后要執(zhí)行的方法煎饼,方法內(nèi)容自定義

// 第三個(gè)參數(shù)useCaputer:譯為是否使用捕捉讹挎,默認(rèn)是false,如果3個(gè)元素分別屬于祖父元素吆玖,父元素筒溃,子元素,
// 都增加了監(jiān)聽方法沾乘,執(zhí)行順序會(huì):都是false怜奖,則子元素先觸發(fā);都是true翅阵,祖父元素先觸發(fā)歪玲;有true有false,
// 設(shè)置為true的先觸發(fā)掷匠,2個(gè)true則在外層的優(yōu)先滥崩。
// 這里牽扯到“事件流”的概念,這里借用下參考資料《TerryChou的事件監(jiān)聽介紹》的答案:監(jiān)聽器在監(jiān)聽時(shí)有三個(gè)階段:捕獲階段讹语、目標(biāo)階段和冒泡階段钙皮。
// 順序?yàn)椋翰东@階段(根節(jié)點(diǎn)到子節(jié)點(diǎn)檢查是否調(diào)用了監(jiān)聽函數(shù))→目標(biāo)階段(目標(biāo)本身)→冒泡階段(目標(biāo)本身到根節(jié)點(diǎn))。
// 此處的參數(shù)確定監(jiān)聽器是運(yùn)行于捕獲階段顽决、目標(biāo)階段還是冒泡階段短条。 
// 下面有具體實(shí)現(xiàn)例子

// 第四個(gè)參數(shù)priority:譯為優(yōu)先。優(yōu)先級才菠,因?yàn)橥粋€(gè)元素可以增加多個(gè)同類型的監(jiān)聽方法茸时,所以在設(shè)置同一元素同一類型多個(gè)
// 監(jiān)聽的執(zhí)行順序時(shí)會(huì)用到

// 第五個(gè)參數(shù)useWeakReference:譯為是否使用弱引用。強(qiáng)引用or弱引用鸠儿,假如是強(qiáng)引用不會(huì)被當(dāng)做垃圾回收掉

例子

情形1:

<div id="outDiv" >
    <div id="middleDiv">
        <div id="inDiv">請?jiān)诖它c(diǎn)擊鼠標(biāo)屹蚊。</div>
    </div>
</div>
<div id="info"></div>

<script>
var outDiv = document.getElementById("outDiv");
var middleDiv = document.getElementById("middleDiv");
var inDiv = document.getElementById("inDiv");
var info = document.getElementById("info");

// 情形一:
outDiv.addEventListener("click", function () { info.innerHTML += "outDiv" + "<br>"; }, false);
middleDiv.addEventListener("click", function () { info.innerHTML += "middleDiv" + "<br>"; }, false);
inDiv.addEventListener("click", function () { info.innerHTML += "inDiv" + "<br>"; }, false);
// 執(zhí)行上述js厕氨,因?yàn)樵O(shè)置的都是false,那么就是非捕捉汹粤,順序?yàn)閺膬?nèi)向外命斧,結(jié)果為:inDiv middleDiv outDiv
// 如果都是true,那么就是捕捉嘱兼,順序?yàn)閺耐庀騼?nèi)国葬,結(jié)果為:outDiv middleDiv inDiv
// 如果僅設(shè)置middle的為true,因?yàn)閠rue會(huì)提高優(yōu)先級芹壕,那么結(jié)果為:middleDiv inDiv outDiv
// 如果設(shè)置多個(gè)true汇四,如設(shè)置outDiv和inDiv為true,根據(jù)提升的優(yōu)先級以及捕捉順序踢涌,結(jié)果為:outDiv inDiv middleDiv
</script>

情形2:

<div id="outDiv" >
    <div id="middleDiv">
        <div id="inDiv" onclick="todo()">請?jiān)诖它c(diǎn)擊鼠標(biāo)通孽。</div>
    </div>
</div>
<div id="info"></div>

<script>
var outDiv = document.getElementById("outDiv");
var middleDiv = document.getElementById("middleDiv");
var inDiv = document.getElementById("inDiv");
var info = document.getElementById("info");

outDiv.addEventListener("click", function () { info.innerHTML += "outDiv" + "<br>"; }, false);
middleDiv.addEventListener("click", function () { info.innerHTML += "middleDiv" + "<br>"; }, false);
inDiv.addEventListener("click", function () { info.innerHTML += "inDiv" + "<br>"; }, false);
function todo() {
    info.innerHTML += "inDiv新增標(biāo)簽onclick方法" + "<br>"
}
inDiv.onclick = function() {
    info.innerHTML += "inDiv新增onclick事件" + "<br>"
}
document.onclick = function () {
    info.innerHTML += "新增的document的onclick事件" + "<br>"
}
// 由于網(wǎng)上也有說執(zhí)行順序?yàn)椋涸诒O(jiān)聽為false時(shí),標(biāo)簽的onclick事件->document.onclick->addEventListener睁壁,特在此驗(yàn)證
// 首先我在inDiv上增加todo()方法背苦,測試發(fā)現(xiàn)無論inDiv的監(jiān)聽無論改為true或false,標(biāo)簽的onclick事件優(yōu)先級均大于監(jiān)聽事件
// 之后增加inDiv.onclick事件潘明,發(fā)現(xiàn)這個(gè)事件會(huì)替換掉標(biāo)簽上的onclick事件行剂,且優(yōu)先級仍舊大于監(jiān)聽事件
// 接著增加document.onclick事件,發(fā)現(xiàn)無論監(jiān)聽事件true或者false钳降,該事件均最后執(zhí)行厚宰,優(yōu)先級最低
// 結(jié)論:同一元素下,無論該元素的監(jiān)聽是否false或者true遂填,標(biāo)簽的onclick事件優(yōu)先級均大于監(jiān)聽铲觉,至于document.onclick,
// 沒太弄明白為什么要比對這個(gè)的優(yōu)先級城菊,很明顯優(yōu)先級最低备燃,低于監(jiān)聽,當(dāng)然凌唬,如果是我理解有誤煩請指正并齐。
</script>

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末况褪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子更耻,更是在濱河造成了極大的恐慌测垛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秧均,死亡現(xiàn)場離奇詭異食侮,居然都是意外死亡号涯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門锯七,熙熙樓的掌柜王于貴愁眉苦臉地迎上來链快,“玉大人,你說我怎么就攤上這事眉尸∮蛭希” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵噪猾,是天一觀的道長霉祸。 經(jīng)常有香客問我,道長袱蜡,這世上最難降的妖魔是什么丝蹭? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮戒劫,結(jié)果婚禮上半夷,老公的妹妹穿的比我還像新娘。我一直安慰自己迅细,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布淘邻。 她就那樣靜靜地躺著茵典,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宾舅。 梳的紋絲不亂的頭發(fā)上统阿,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音筹我,去河邊找鬼扶平。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蔬蕊,可吹牛的內(nèi)容都是我干的结澄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼岸夯,長吁一口氣:“原來是場噩夢啊……” “哼麻献!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猜扮,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勉吻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后旅赢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體齿桃,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惑惶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了短纵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片集惋。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖踩娘,靈堂內(nèi)的尸體忽然破棺而出刮刑,到底是詐尸還是另有隱情,我是刑警寧澤养渴,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布雷绢,位于F島的核電站,受9級特大地震影響理卑,放射性物質(zhì)發(fā)生泄漏翘紊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一藐唠、第九天 我趴在偏房一處隱蔽的房頂上張望帆疟。 院中可真熱鬧,春花似錦宇立、人聲如沸踪宠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柳琢。三九已至,卻和暖如春润脸,著一層夾襖步出監(jiān)牢的瞬間柬脸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工毙驯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倒堕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓爆价,卻偏偏與公主長得像垦巴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子允坚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容