2-1 事件對(duì)象

當(dāng)一個(gè)事件發(fā)生的時(shí)候,都會(huì)去創(chuàng)建一個(gè)對(duì)象,我們可以從事件對(duì)象上獲取一些相關(guān)的信息。比如,事件是通過(guò)什么觸發(fā)的,是鼠標(biāo)呀,還是鍵盤呀,事件觸發(fā)的時(shí)候是否有冒泡、是否有阻止等很多的相關(guān)信息。
在js編程中有一句話,一切介對(duì)象,所以事件也是對(duì)象。比如,當(dāng)我們點(diǎn)擊一個(gè)函數(shù)的時(shí)候,會(huì)觸發(fā)一個(gè)函數(shù),這個(gè)函數(shù)就開(kāi)始執(zhí)行了。這個(gè)函數(shù)就是方法,而方法就是對(duì)象。

EventTarget對(duì)象 定義了事件監(jiān)聽(tīng)與觸發(fā)方法的對(duì)象

我們?cè)谇懊嬷v過(guò),一個(gè)節(jié)點(diǎn)有繼承的關(guān)系,沒(méi)個(gè)節(jié)點(diǎn)都會(huì)有一個(gè)頭,而EventTarget就是這個(gè)繼承的頭。
1、所有節(jié)點(diǎn)都繼承這個(gè)對(duì)象;
2、這個(gè)對(duì)象上有三個(gè)方法;
??2.1、addEventListener 綁定事件的監(jiān)聽(tīng)函數(shù)
???參數(shù)2可以是一個(gè)對(duì)象(必需具有handleEvent方法)
???參數(shù)3可以是一個(gè)對(duì)象
????capture false代表冒泡階段觸發(fā),true代表捕獲階段觸發(fā)
????once false代表事件可以觸發(fā)多次,true代表事件只能觸發(fā)一次
????passive false代表事件里可以使用preventDefault方法,true代表事件里不可以使用preventDefault方法(會(huì)報(bào)錯(cuò))

<div>1</div>
<div>2</div>
<div>3</div>
<script>
            console.dir(EventTarget);
            console.dir(Event);
            
            const divs=document.querySelectorAll("div");
            divs[0].addEventListener('click',{
                handleEvent(ev){
                    console.log(ev);
                    ev.preventDefault();
                }
            },{capture:false,once:true,passive:false});
            
            
            divs[1].addEventListener('click',function(){
                console.log(this);
            });

            divs[1].addEventListener('click',function(){
                console.log(this);
            });
            const obj={
                age:18,
                handleEvent(ev){
                    console.log(this);  //這里的this會(huì)指向obj對(duì)象本身
                    console.log(this.age);  //這里的this會(huì)指向obj對(duì)象本身
                }
            };
            divs[1].addEventListener('click',obj);
                    //移除事件處理函數(shù)
            obj.handleEvent=()=>{
                console.log('事件函數(shù)已經(jīng)被修改');
            }

           const events={
                handleEvent(ev){
                    switch(ev.type){
                        case 'click':
                            this.click(ev);
                            break;
                            
                        case 'mousemove':
                            this.mousemove(ev);
                            break;
                            
                        case 'mouseout':
                            this.mouseout(ev);
                            break;
                    }
                },
                click(ev){
                    console.log('鼠標(biāo)被點(diǎn)擊了');
                },
                mousemove(ev){
                    console.log('鼠標(biāo)移動(dòng)了');
                },
                mouseout(ev){
                    console.log('鼠標(biāo)離開(kāi)了');
                }
            };
            divs[2].addEventListener('click',events);
            divs[2].addEventListener('mousemove',events);
            divs[2].addEventListener('mouseout',events);
</script>

從上面的代碼我們可以看出,以后我們只需要操作 obj.handleEvent就可以了

??2.2、removeEventListener 移除事件的監(jiān)聽(tīng)函數(shù)
??2.3、dispatchEvent 觸發(fā)事件

事件發(fā)生以后,會(huì)生成一個(gè)事件對(duì)象Event

Event 事件對(duì)象(事件的構(gòu)造函數(shù))

1、它里面存儲(chǔ)了事件發(fā)生時(shí)的各種信息;
2、標(biāo)準(zhǔn)瀏覽器的事件對(duì)象為事件監(jiān)聽(tīng)函數(shù)的第一個(gè)參數(shù);
3、它包含很多子類MouseEvent、KeyboardEvent、InputEvent、FocusEvent、WheelEvent、UIEvent;

屬性

1、bubbles 表示當(dāng)前事件是否會(huì)冒泡,返回布爾值
2、cancelBubble 與上一個(gè)一樣,但是它可以設(shè)置,已從web標(biāo)準(zhǔn)里移除了用stopPropagation()方法來(lái)代替
3、cancelable 表示這個(gè)事件的默認(rèn)動(dòng)作是否可以取消,返回布爾值。如果為true的話可以調(diào)用它對(duì)應(yīng)的preventDefault()方法,為false的話不可以(IE不支持)
4、currentTarget 返回綁定事件的節(jié)點(diǎn)
5、target 返回觸發(fā)事件的節(jié)點(diǎn)(點(diǎn)擊的是哪個(gè)節(jié)點(diǎn)這個(gè)值就指向這個(gè)節(jié)點(diǎn))(IE678里這個(gè)屬性名為srcElement)
6、defaultPrevented 表示事件是否已經(jīng)阻止默認(rèn)行為(調(diào)用過(guò)preventDefault方法),返回布爾值
7、eventPhase 表示事件目前所處的階段,返回?cái)?shù)字
0 事件目前沒(méi)有發(fā)生
1 事件目前處于捕獲階段
2 事件到達(dá)目標(biāo)節(jié)點(diǎn)
3 事件處于冒泡階段
8、type 表示事件類型,返回一個(gè)字符串
9、isTrusted 表示該事件是否為真實(shí)用戶觸發(fā),返回布爾值(用模擬事件觸發(fā)返回false)

方法

1、preventDefault 取消瀏覽器對(duì)當(dāng)前事件的默認(rèn)行為;
2、stopImmediatePropagation 阻止同一個(gè)事件的其他監(jiān)聽(tīng)函數(shù)被調(diào)用;
3、stopPropagation 阻止事件在DOM中繼續(xù)傳遞;

參考

https://developer.mozilla.org/en-US/docs/Web/API/Event

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本節(jié)介紹各種常見(jiàn)的瀏覽器事件。 鼠標(biāo)事件 鼠標(biāo)事件指與鼠標(biāo)相關(guān)的事件,主要有以下一些。 click 事件,dblc...
    許先生__閱讀 2,840評(píng)論 0 4
  • 事件是一種異步編程的實(shí)現(xiàn)方式,本質(zhì)上是程序各個(gè)組成部分之間的通信。DOM支持大量的事件,本節(jié)介紹DOM的事件編程。...
    許先生__閱讀 1,030評(píng)論 0 3
  • 事件是一種異步編程的實(shí)現(xiàn)方式,本質(zhì)上是程序各個(gè)組成部分之間的通信。DOM支持大量的事件,本節(jié)介紹DOM的事件編程。...
    周花花啊閱讀 678評(píng)論 0 3
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,513評(píng)論 0 8
  • 目錄 概述 EventTarget接口EventTarget.addEventListener()EventTar...
    許驍Charles閱讀 611評(píng)論 4 0

友情鏈接更多精彩內(nèi)容