1. 程式人生 > >JS高階:事件冒泡和事件捕獲;

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還是指向原來的指向不變

所有的事件都是非同步的!!!