2023-02-18 js-事件相關(guān)

1. 認(rèn)識(shí)事件

Web頁(yè)面需要經(jīng)常和用戶之間進(jìn)行交互,而交互的過(guò)程中我們可能想要捕捉這個(gè)交互的過(guò)程:

監(jiān)聽(tīng)事件
  • 事件監(jiān)聽(tīng)方式一:在script中直接監(jiān)聽(tīng)(很少使用);
  • 事件監(jiān)聽(tīng)方式二:DOM屬性,通過(guò)元素的on來(lái)監(jiān)聽(tīng)事件;
  • 事件監(jiān)聽(tīng)方式三:通過(guò)EventTarget中的addEventListener來(lái)監(jiān)聽(tīng)骑脱;

2. 常見(jiàn)的事件列表

  1. 鼠標(biāo)事件:

    • click —— 當(dāng)鼠標(biāo)點(diǎn)擊一個(gè)元素時(shí)(觸摸屏設(shè)備會(huì)在點(diǎn)擊時(shí)生成)。
    • mouseover / mouseout —— 當(dāng)鼠標(biāo)指針移入/離開(kāi)一個(gè)元素時(shí)苍糠。
    • mousedown / mouseup —— 當(dāng)在元素上按下/釋放鼠標(biāo)按鈕時(shí)叁丧。
    • mousemove —— 當(dāng)鼠標(biāo)移動(dòng)時(shí)。
  2. 鍵盤(pán)事件:

    • keydown 和 keyup —— 當(dāng)按下和松開(kāi)一個(gè)按鍵時(shí)岳瞭。
  3. 表單(form)元素事件:

    • submit —— 當(dāng)訪問(wèn)者提交了一個(gè) <form> 時(shí)拥娄。
    • focus —— 當(dāng)訪問(wèn)者聚焦于一個(gè)元素時(shí),例如聚焦于一個(gè) <input>瞳筏。
  4. Document 事件:

    • DOMContentLoaded —— 當(dāng) HTML 的加載和處理均完成稚瘾,DOM 被完全構(gòu)建完成時(shí)。
  5. CSS 事件:

    • transitionend —— 當(dāng)一個(gè) CSS 動(dòng)畫(huà)完成時(shí)姚炕。

3. 事件流

為什么會(huì)產(chǎn)生事件流呢摊欠?

當(dāng)我們?cè)跒g覽器上對(duì)著一個(gè)元素點(diǎn)擊時(shí),你點(diǎn)擊的不僅僅是這個(gè)元素本身柱宦;

因?yàn)槲覀兊腍TML元素是存在父子元素疊加層級(jí)的些椒;

事件冒泡和事件捕獲

從最內(nèi)層的元素向外依次傳遞的順序,稱之為事件冒泡(Event Bubble);
是從外層到內(nèi)層(body -> span)掸刊,這種稱之為事件捕獲(Event Capture)

開(kāi)發(fā)中通常會(huì)使用事件冒泡(默認(rèn))
// 監(jiān)聽(tīng)捕獲 第三個(gè)參數(shù)設(shè)置成true
El.addEventLinstener("event", fn, true)

4. 事件對(duì)象

比如事件的類型是什么免糕,你點(diǎn)擊的是哪一個(gè)元素,點(diǎn)擊的位置是哪里等等相關(guān)的信息忧侧;

那么這些信息會(huì)被封裝到一個(gè)Event對(duì)象中说墨,這個(gè)對(duì)象由瀏覽器創(chuàng)建,稱之為event對(duì)象苍柏;

獲取這個(gè)event對(duì)象

event對(duì)象會(huì)在傳入的事件處理(event handler)函數(shù)回調(diào)時(shí),被系統(tǒng)傳入姜贡;

我們可以在回調(diào)函數(shù)中拿到這個(gè)event對(duì)象试吁;

對(duì)象的常見(jiàn)屬性

  • type:事件的類型;
  • target:當(dāng)前事件發(fā)生的元素楼咳;
  • currentTarget:當(dāng)前處理事件的元素熄捍;
  • eventPhase:事件所處的階段;
  • offsetX母怜、offsetY:事件發(fā)生在元素內(nèi)的位置余耽;
  • clientX、clientY:事件發(fā)生在客戶端內(nèi)的位置苹熏;
  • pageX碟贾、pageY:事件發(fā)生在客戶端相對(duì)于document的位置币喧;
  • screenX、screenY:事件發(fā)生相對(duì)于屏幕的位置袱耽;

對(duì)象的常見(jiàn)方法

  • preventDefault:取消事件的默認(rèn)行為杀餐;
  • stopPropagation:阻止事件的進(jìn)一步傳遞(冒泡或者捕獲都可以阻止);

事件處理中的this

在函數(shù)中朱巨,我們也可以通過(guò)this來(lái)獲取當(dāng)前的發(fā)生元素:

這是因?yàn)樵跒g覽器內(nèi)部史翘,調(diào)用event handler是綁定到當(dāng)前的target上的

5. EventTarget類

所有的節(jié)點(diǎn)、元素都繼承自EventTarget

EventTarget常見(jiàn)的方法:

  • addEventListener:注冊(cè)某個(gè)事件類型以及事件處理函數(shù)冀续;
  • removeEventListener:移除某個(gè)事件類型以及事件處理函數(shù)琼讽;
        var btnEl = document.querySelector("button")
        var foo = function () {
            console.log("監(jiān)聽(tīng)到按鈕的點(diǎn)擊")
        }
        btnEl.addEventListener("click", foo)


        setTimeout(function () {
            console.log("將事件監(jiān)聽(tīng)移除掉")
            btnEl.removeEventListener("click", foo)
        }, 5000)
  • dispatchEvent:派發(fā)某個(gè)事件類型到EventTarget上;
        window.addEventListener("wsw", function () {
            console.log("啦啦啦啦啦啦收到消息啦")
        })
        setTimeout(() => {
            window.dispatchEvent(new Event("wsw"))
        }, 5000);

6. 事件委托

因?yàn)楫?dāng)子元素被點(diǎn)擊時(shí)洪唐,父元素可以通過(guò)冒泡可以監(jiān)聽(tīng)到子元素的點(diǎn)擊钻蹬;

并且可以通過(guò)event.target獲取到當(dāng)前監(jiān)聽(tīng)的元素;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桐罕,一起剝皮案震驚了整個(gè)濱河市脉让,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌功炮,老刑警劉巖溅潜,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異薪伏,居然都是意外死亡滚澜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)嫁怀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)设捐,“玉大人,你說(shuō)我怎么就攤上這事塘淑÷苷校” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵存捺,是天一觀的道長(zhǎng)槐沼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捌治,這世上最難降的妖魔是什么岗钩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮肖油,結(jié)果婚禮上兼吓,老公的妹妹穿的比我還像新娘。我一直安慰自己森枪,他們只是感情好视搏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布审孽。 她就那樣靜靜地躺著,像睡著了一般凶朗。 火紅的嫁衣襯著肌膚如雪瓷胧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天棚愤,我揣著相機(jī)與錄音搓萧,去河邊找鬼。 笑死宛畦,一個(gè)胖子當(dāng)著我的面吹牛瘸洛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播次和,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼反肋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了踏施?” 一聲冷哼從身側(cè)響起石蔗,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畅形,沒(méi)想到半個(gè)月后养距,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡日熬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年棍厌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竖席。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耘纱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毕荐,到底是詐尸還是另有隱情束析,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布憎亚,位于F島的核電站畸陡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏虽填。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一曹动、第九天 我趴在偏房一處隱蔽的房頂上張望斋日。 院中可真熱鬧,春花似錦墓陈、人聲如沸恶守。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兔港。三九已至庸毫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衫樊,已是汗流浹背飒赃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留科侈,地道東北人载佳。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像臀栈,于是被迫代替她去往敵國(guó)和親蔫慧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • js事件是為了實(shí)現(xiàn)用戶交互权薯,比如當(dāng)用戶鼠標(biāo)點(diǎn)擊或者鍵盤(pán)輸入時(shí)姑躲,瀏覽器會(huì)監(jiān)聽(tīng)截獲并且通知js做出反饋執(zhí)行相應(yīng)的函數(shù),...
    深度剖析JavaScript閱讀 737評(píng)論 0 7
  • Dom事件 事件是一種異步編程的實(shí)現(xiàn)方式盟蚣,本質(zhì)上是程序各個(gè)組成部分之間的通信黍析。DOM支持大量的事件 (一) Eve...
    woow_wu7閱讀 1,761評(píng)論 0 1
  • 監(jiān)聽(tīng)函數(shù) 瀏覽器的事件模型,就是通過(guò)監(jiān)聽(tīng)函數(shù)(listener)對(duì)事件做出反應(yīng)刁俭。事件發(fā)生后橄仍,瀏覽器監(jiān)聽(tīng)到了這個(gè)事件...
    oWSQo閱讀 483評(píng)論 1 3
  • 一、什么是事件: 用戶->操作HTML元素->產(chǎn)生一個(gè)事件->事件主動(dòng)的調(diào)用設(shè)定的方法(函數(shù)) 二牍戚、注冊(cè)事件 HT...
    Jackson_yee_閱讀 278評(píng)論 0 0
  • JS事件綁定 均以點(diǎn)擊事件為例: 方法1:把函數(shù)綁定在HTML標(biāo)簽上 也叫HTML元素行間事件 方法二:把函數(shù)賦值...
    AizawaSayo閱讀 394評(píng)論 0 1