a)鼠標事件 鼠標事件也許是web頁面當中最常用到的事件,因為鼠標是最常用的導航設備,在DOM3級事件上定義了9個鼠標事件,分別為:
click:當用戶點擊鼠標主鍵通常是指鼠標左鍵或按回車鍵時觸發。
dbclick:當用戶雙擊鼠標主鍵時發生觸發,這個事件並沒有在DOM2級事件中定義但是卻被普遍支持了,後來在DOM3級中得到了標准化。
mousedown:當用戶按下鼠標任意一個鍵都會觸發,這個事件是不能夠通過鍵盤觸發的。
mouseenter:當鼠標圖標從元素外移動至元素邊界內時觸發。該事件不支持冒泡,而且當鼠標在元素的上表面移動時負觸發此事件。該事件不屬於DOM2級事件,屬於DOM3級後添加的事件,IE 、FF9+、以及opera支持此事件。
mouseleave:當鼠標處於元素上方,之後移出元素邊界是觸發該事件,與mouseenter事件相同,不支持冒泡,在元素上方是不觸發,該事件不屬於DOM2級事件,屬於DOM3級後添加的事件,IE 、FF9+、以及opera支持此事件。
mousemove:當鼠標在某元素周圍移動時重復觸發,該事件不能通過鍵盤事件觸發。
mouseout:當鼠標處於某一元素上方,之後移動到其他元素上方時觸發。元素移動到原始元素的邊界外,或者原始元素的子元素上,這個事件不能通過鍵盤觸發。
mouseover:當用戶將鼠標第一次從某元素邊界外移動到該元素邊界內時觸發,這個事件不能夠通過鍵盤觸發。
mouseup:當用戶釋放鼠標按鍵是觸發,這個事件不能夠通過鍵盤觸發。
頁面上的所有元素都支持鼠標事件,除了mouseenter和mouseleave外,所有的事件都冒泡,並且他們的默認行為是可以被取消掉的。但取消鼠標事件的默認行為可能會影響到其他事件,因為有些鼠標事件是相互依賴的。
只有當一個mousedown事件和一個mouseup事件在同一個元素上觸發,才能觸發鼠標的click事件;假設任何一個事件被取消,click事件將永遠不會被觸發。相似的原理dbclick事件依賴於click事件,如果連續兩次click事件中任意一次被取消,dbclick都不會被觸發。常用的鼠標事件如下:
1.mousedown、2.mouseup、3.click、4.mousedown、5.mouseup、6.click、7.dbclick。
無論是click 還是 dbclick事件,都依賴於其他事件的觸發。
你可以通過下面的代碼來確定浏覽器是否在dom2事件上支持鼠標事件,
var isSupport = document.implementation.hasFeature('MouseEvents','2.0');
然而值得注意的是在dom3級事件上檢測則有些不同:
var isSupport = document.implementation.hasFeature('MouseEvent','3.0');
在鼠標事件上還包含一個子類事件,即wheel事件(滾輪事件)。在wheel事件中只包含一個事件,mousewheel事件,他反應鼠標滾輪或其他裝置,如mac的touchpad的交互情況。
b)關聯元素 對於mouseover和mouseout事件來說,還存在著與事件相關的元素,這連個事件所執行的動作包括,移動鼠標從一個元素邊界內部到另一個元素邊界內部。以mouseover事件為例,他的主要目標元素是鼠標將要移至的元素,而那個關聯元素就是失去鼠標的那個元素。同樣對於mouseout事件,主要目標是那個鼠標移出的元素,而關聯元素則是獲得鼠標的元素,DOM通過event對象上的relatedTarget屬性來提供關聯元素的信息,IE8或更早版本的IE不支持relatedTarge屬性,但卻提供了與其功能相類似的fromElement屬性和toElement屬性。在IE下,當mousemove事件觸發時,event對象的fromElement包含著關聯元素,當mouseout事件觸發時,event的toElement屬性包含著關聯元素。在IE9中支持所有的屬性,一個跨浏覽器的getRelatedTarget方法可以這樣寫:
復制代碼 代碼如下:
var eventUtil = {
getRelateTarget:function(event){
if (event.relatedTarget) {
return event.relatedTarget;
}else if(event.fromElement){
return event.fromElement;
}else if(event.toElement){
return event.toElement;
}else {
return null;
}
}
};
c)buttons click事件只有當鼠標主鍵點擊了某一元素的時候才會觸發(或者當某一元素獲得焦點時按下回車鍵),對於mousedown和mouseup來說,在事件對象event上存在一個屬性button,他可以確定是哪個鍵按下或者釋放。在DOM實現的button屬性值通常有三種可能:
0:代表主鍵,
1:代表滾輪,
2:代表副鍵。
在一般情況下主鍵指的是鼠標的左鍵,副鍵代表鼠標右鍵。
從IE8開始也提供了button屬性,但卻有著完全不同的取值范圍:
0 :沒有按鍵按下,
1 :主鍵已經被按下,
2 :代表副鍵已經被按下,
3 :主鍵副鍵都被按下,
4 :代表中間鍵被按下,
5 :代表主鍵和中間件被按下,
6 :代表副鍵和中間鍵被按下,
7 :代表三個鍵都被按下。
可見DOM 模型下的button屬性的取值范圍比IE模型下的取值范圍要簡單的多,而且個人覺得ie下的操作情況略顯變態。
d)其他事件信息 在DOM2級事件上,為事件對象event還提供了detail屬性來提供更多的事件信息,例如對於點擊事件來說,detail可以記錄同一像素位置的點擊次數,detail的值是從1開始計數的,每次點擊後加一,如果在mousedown和mouseup之間,鼠標發生移動,這個值將會被清零。
關於鼠標事件就先寫這些,日後在慢慢補全。