事件對象
事件對象是什么茂装?
當(dāng)事件觸發(fā)的時候叫倍,產(chǎn)生的對象,該對象記錄有事件相關(guān)的信息骤素。
如何獲取事件對象家淤?
在事件綁定的回調(diào)函數(shù)的第一個參數(shù)就是事件對象
一般命名為event异剥、ev、e
事件對象常用屬性
常用屬性
pageX/pageY :獲取光標(biāo)相對于頁面左上角的位置
key:用戶按下的鍵盤鍵的值
事件流
什么是事件流絮重?
事件流指的是事件完整執(zhí)行過程中的流動路徑
事件流和兩個階段說明
說明:假設(shè)頁面里有個div冤寿,當(dāng)觸發(fā)事件時,會經(jīng)歷兩個階段青伤,分別是捕獲階段督怜、冒泡階段
簡單來說:捕獲階段是 從父到子 冒泡階段是從子到父
事件冒泡概念: 當(dāng)一個元素的事件被觸發(fā)時,同樣的事件將會在該元素的所有祖先元素中依次被觸發(fā)狠角。這一過程被稱為事件冒泡
簡單理解:當(dāng)一個元素觸發(fā)事件后号杠,會依次向上調(diào)用所有父級元素的同名事件
事件冒泡是默認(rèn)存在的
事件捕獲概念:
從DOM的根元素開始去執(zhí)行對應(yīng)的事件 (從外到里)
說明:
addEventListener第三個參數(shù)傳入true代表是捕獲階段觸發(fā)(了解即可)
若傳入false代表冒泡階段觸發(fā),默認(rèn)就是false
若是用 L0 事件監(jiān)聽丰歌,則只有冒泡階段究流,沒有捕獲
阻止事件流動
阻止事件流動需要通過事件對象來實現(xiàn)
事件對象.stopPropagation
此方法可以阻斷事件流動傳播辣吃,不光在冒泡階段有效,捕獲階段也有效
鼠標(biāo)經(jīng)過事件:
mouseover 和 mouseout 會有冒泡效果
mouseenter 和 mouseleave 沒有冒泡效果(推薦)
兩種注冊事件的區(qū)別(了解)
傳統(tǒng)on注冊(L0)
同一個對象,后面注冊的事件會覆蓋前面注冊(同一個事件)
直接使用null覆蓋就可以實現(xiàn)事件的解綁
都是冒泡階段執(zhí)行的
事件監(jiān)聽注冊(L2)
語法: addEventListener(事件類型, 事件處理函數(shù), 是否使用捕獲)
后面注冊的事件不會覆蓋前面注冊的事件(同一個事件)
可以通過第三個參數(shù)去確定是在冒泡或者捕獲階段執(zhí)行
必須使用removeEventListener(事件類型, 事件處理函數(shù), 獲取捕獲或者冒泡階段)
匿名函數(shù)無法被解綁
阻止瀏覽器的默認(rèn)行為
阻止默認(rèn)行為芬探,比如鏈接點擊不跳轉(zhuǎn)神得,表單域的不提交
語法:e.prevevtDefault()
事件委托
優(yōu)點:給父級元素加事件(可以提高性能)
原理:事件冒泡,給父元素注冊的事件偷仿,子元素是可以觸發(fā)
實現(xiàn):事件對象.target 可以獲得真正觸發(fā)事件的元素