什么是事件
- JavaScript和HTML之間的交互是通過事件實(shí)現(xiàn)的
事件,就是文檔或?yàn)g覽器窗口發(fā)生的一些特定的交互瞬間??梢允褂帽O(jiān)聽器(或事件處理程序)來預(yù)定事件,以便事件發(fā)生時(shí)執(zhí)行相應(yīng)的代碼。通俗的說,這種模型其實(shí)就是一個(gè)觀察者模式。(事件是對(duì)象主題,而這一個(gè)個(gè)的監(jiān)聽器就是一個(gè)個(gè)觀察者)
什么是事件流
事件流描述的就是從頁面中接收事件的順序。而IE和Netscape提出了完全相反的事件流概念。IE事件流是事件冒泡,而Netscape的事件流就是事件捕獲。
事件捕獲
當(dāng)某個(gè)元素觸發(fā)某個(gè)事件(如onclick),頂層對(duì)象document就會(huì)發(fā)出一個(gè)事件流,隨著DOM樹的節(jié)點(diǎn)向目標(biāo)元素節(jié)點(diǎn)流去,直到到達(dá)事件真正發(fā)生的目標(biāo)元素。在這個(gè)過程中,事件相應(yīng)的監(jiān)聽函數(shù)是不會(huì)被觸發(fā)的
事件目標(biāo)
當(dāng)?shù)竭_(dá)目標(biāo)元素之后,執(zhí)行目標(biāo)元素該事件相應(yīng)的處理函數(shù)。如果沒有綁定監(jiān)聽函數(shù),那就不執(zhí)行。
事件冒泡
從目標(biāo)元素開始,往頂層元素傳播。途中如果有節(jié)點(diǎn)綁定了相應(yīng)的事件處理函數(shù),這些函數(shù)都會(huì)被一次觸發(fā)
事件流分為兩種,捕獲事件流和冒泡事件流 :
捕獲事件流從根節(jié)點(diǎn)開始執(zhí)?。?直往?節(jié)點(diǎn)查找執(zhí)?,直到查找執(zhí)?到?標(biāo)節(jié)點(diǎn)
冒泡事件流從?標(biāo)節(jié)點(diǎn)開始執(zhí)?,?直往?節(jié)點(diǎn)冒泡查找執(zhí)?,直到查到到根節(jié)點(diǎn)
- 事件捕獲:
當(dāng)某個(gè)元素觸發(fā)某個(gè)事件(如onclick),頂層對(duì)象document就會(huì)發(fā)出一個(gè)事件流,隨著DOM樹的節(jié)點(diǎn)向目標(biāo)元素節(jié)點(diǎn)流去,直到到達(dá)事件真正發(fā)生的目標(biāo)元素。在這個(gè)過程中,事件相應(yīng)的監(jiān)聽函數(shù)是不會(huì)被觸發(fā)的。
- 事件冒泡:
從目標(biāo)元素開始,往頂層元素傳播。途中如果有節(jié)點(diǎn)綁定了相應(yīng)的事件處理函數(shù),這些函數(shù)都會(huì)被一次觸發(fā)。
事件流分 三個(gè)階段
?個(gè)是捕獲節(jié)點(diǎn),
?個(gè)是處于?標(biāo)節(jié)點(diǎn)階段,
?個(gè)是冒泡階段
- 阻止冒泡
1:e.stopPropagation ();//阻止事件冒泡;
2:e.preventDefault ();//阻止默認(rèn)事件;
3: return false;//阻止冒泡,用于JQ;
function(event){
event.stopPropagation();//阻止冒泡事件
}
function(event){
event.preventDefault();//阻止默認(rèn)行為
//return false;//也可以
}
- 阻止默認(rèn)事件:
1.event.stopPropagation()方法 這是阻止事件的冒泡方法,不讓事件向documen上蔓延,但是默認(rèn)事件任然會(huì)執(zhí)行,當(dāng)你掉用這個(gè)方法的時(shí)候,如果點(diǎn)擊一個(gè)連接,這個(gè)連接仍然會(huì)被打開,
2.event.preventDefault()方法 這是阻止默認(rèn)事件的方法,調(diào)用此方法是,連接不會(huì)被打開,但是會(huì)發(fā)生冒泡,冒泡會(huì)傳遞到上一層的父元素;
- Vue 阻止默認(rèn)事件 @click.stop 代表阻止冒泡事件 ; @click.prevent 代表阻止默認(rèn)事件