JS高階:事件冒泡和事件捕獲;
1、事件:瀏覽器客戶端上客戶觸發的行為成為時事件;所有的事件都是天生自帶的,不需要我們去繫結,只需要我們去觸發
當用戶觸發一個事件時,瀏覽器的所有詳細資訊都存在一個叫做event的物件上,我們把它叫做事件物件
2、獲取滑鼠的座標
event.clientX;event.clientY
document.onclick=function(){
event.clientX
event.clientY
}
3、關於event的相容性
標準:event是undefined
非標準:null
解決相容: var e=e||windoe.event
4、事件冒泡:
當給父子元素同一事件繫結方法的時候,觸發了子元素的事件,執行完畢後,也會觸發父級元素的相同時間,這種傳播機制叫做事件冒泡
取消事件冒泡:event.cancelBubble=true
5、事件捕獲:
給父子元素用addEventLIstener()繫結統一個事件,會先觸發父元素,然後再傳遞給子元素,這種傳播機制叫做事件捕獲
(1)IE低版本沒有事件捕獲
(2)普通的事件繫結寫法沒有事件捕獲
給元素繫結事件,有兩種
(1)常用的寫法:
obj.onclick=function(){}
這個寫法有缺點,如果一個元素繫結相同的事件多次,後者會覆蓋前者,因此這個寫法相當於給obj的onclick的屬性賦值
(2)第二種寫法
標準瀏覽器用:addEventListener()
非標準用:attachEvent()
addEventListener(引數1,引數2,引數3)
引數1:事件名,並且不帶"on"
引數2:事件函式
引數3:布林值,代表捕獲不捕獲,預設值是false,不捕獲單冒泡
attathEvent()和addEventListener()的區別
(1)attachEvent()只用在IE8以下,addEventListener()適合標準瀏覽器
(2)attachEvent()的事件名帶on,addEventListener()的事件名不帶on
(3)attachEvent()函式裡面的this是undefined,addEventListener()的函式裡面的this是當前元素物件
(4)attachEvent()只有冒泡沒有捕獲,addEventListener()有冒泡也有捕獲
call和apply
都是改變this的指向的方法,而且是函式物件、類、建構函式
call和apply的第一個引數是null的時候,函式裡面的this還是指向原來的指向不變
所有的事件都是非同步的!!!