前端面試準(zhǔn)備--3.DOM事件

DOM事件

1.基本概念:DOM事件的級(jí)別

DOM事件類   
DOM1標(biāo)準(zhǔn)指定的時(shí)候沒(méi)有涉及任何和事件相關(guān)的東西;

事件級(jí)別
    DOM0    element.onclick=function(){};
    //-->true,false指定冒泡還是捕獲
    //IE attachEvent
    DOM2    element.addEventListener('click',function(){},false);
    //事件類型增加了很多;
    DOM3    element.addEventListener('keyup',function(){},false);

2.DOM事件模型(冒泡捕獲)

    捕獲(從上往下)
    冒泡(從目標(biāo)元素往上)

3.DOM事件流(頁(yè)面中接受事件的順序;)

瀏覽器在為當(dāng)前頁(yè)面與用戶做交互的過(guò)程中,比如點(diǎn)擊了鼠標(biāo)左鍵,
這個(gè)左鍵是怎么傳到你的頁(yè)面上,又怎么響應(yīng)的。

    1、捕獲階段
    2、目標(biāo)階段     事件通過(guò)捕獲到達(dá)目標(biāo)元素
    3、冒泡階段     從目標(biāo)元素上傳到window對(duì)象       

4.描述DOM事件捕獲的具體流程

    第一個(gè)接受事件的對(duì)象是window;
    取得body標(biāo)簽:document.body;
    表示html節(jié)點(diǎn):document.documentElement;
    
捕獲流程: window-->document-->html標(biāo)簽-->body-->父級(jí)元素--子級(jí)元素...-->目標(biāo)元素

冒泡流程:從目標(biāo)元素一層一層最后到window完成了一次冒泡的流程 ; 

5.Event對(duì)象的常見(jiàn)應(yīng)用

  • event.preventDefault(); 阻止默認(rèn)行為

    a標(biāo)簽綁定了click事件,在響應(yīng)函數(shù)中設(shè)置了preventDefault,就阻止了鏈接默認(rèn)跳轉(zhuǎn)的行為。

  • event.stopPropagation(); 阻止冒泡

父級(jí)元素、子集元素都綁定有事件,單擊子元素做一件事,單擊父元素在做一件事;如果不阻止冒泡,單擊子元素的范圍的時(shí)候,根據(jù)冒泡的原理,父級(jí)元素也會(huì)被響應(yīng);

  • event.stoplmmediatePropagation(); 事件響應(yīng)優(yōu)先級(jí)

    一個(gè)按鈕綁定了兩個(gè)click事件1和2,想通過(guò)優(yōu)先級(jí)的方式,第一個(gè)響應(yīng)函數(shù)是a,
    第二個(gè)響應(yīng)函數(shù)是b,依次注冊(cè)了a、b兩個(gè)事件,想讓執(zhí)行a之后完不在執(zhí)行b了;
    a響應(yīng)函數(shù)中加上上面那個(gè)代碼,就會(huì)成功的阻止b執(zhí)行;
    
  • event.currentTarget(currentTarget當(dāng)前綁定事件的對(duì)象;指定的是父級(jí)元素)

    把子元素的事件代理都轉(zhuǎn)移到父元素上,只綁定一次事件就可以了。做響應(yīng)的時(shí)候就要區(qū)分是哪個(gè)元素被觸發(fā)。

  • event.target(target是當(dāng)前被點(diǎn)擊的元素)

  • 自定義事件(重要!?。。?-或者模擬事件

      eg:有一個(gè)按鈕,增加一個(gè)事件,在別的地方觸發(fā)這個(gè)事件,而不是用回調(diào)的方式處理;
      
      1.var eve = new Event('custome');   
      //通過(guò)new Event聲明一個(gè)自定義事件,把eve這個(gè)事件當(dāng)作普通事件對(duì)象,只不過(guò)這個(gè)事件是 
    你定義的
     
      2.ev.addEventListener('custome',function(){
          console.log('custome');
      }); //ev是一個(gè)dom節(jié)點(diǎn),通過(guò)dom2這種事件注冊(cè)的方式綁定這個(gè)事件名稱;
      
      3.//最后觸發(fā)就是用這個(gè)dom節(jié)點(diǎn),dispatchEvent這個(gè)api觸發(fā)eve這個(gè)對(duì)象。
      ev.dispatchEvent(eve);
    

    總結(jié):

    • Event 的不足只能指定事件名,如果想給這個(gè)事件加些數(shù)據(jù),Event是做不到的;用CustomEvent;

    • CustomeEvent 自定義事件的一個(gè)方法;除了可以指定事件名,后邊還可以跟一個(gè)object來(lái)做指定參數(shù)。這個(gè)參數(shù)是自定義的,所以用法是一樣的。

    *******CustomeEvent怎么用的,怎么傳遞數(shù)據(jù)?***********

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • <a name='html'>HTML</a> Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,817評(píng)論 1 19
  • 前端開(kāi)發(fā)面試知識(shí)點(diǎn)大綱: HTML&CSS: 對(duì)Web標(biāo)準(zhǔn)的理解、瀏覽器內(nèi)核差異、兼容性、hack、CSS基本功:...
    秀才JaneBook閱讀 2,767評(píng)論 0 25
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,504評(píng)論 0 8
  • 以下文章為轉(zhuǎn)載,對(duì)理解JavaScript中的事件處理機(jī)制很有幫助,淺顯易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy閱讀 3,165評(píng)論 1 10
  • 文/三醬 不知不覺(jué)中2017年已經(jīng)進(jìn)入了倒計(jì)時(shí)的時(shí)刻,隨著時(shí)間推進(jìn)的還有漫威今年的進(jìn)度條。 而漫威宣布的下半年推出...
    liya三醬閱讀 1,937評(píng)論 0 5

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