淺談Javascript滑鼠和滾輪事件

來源:互聯網
上載者:User

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之間,滑鼠發生移動,這個值將會被清零。

關於滑鼠事件就先寫這些,日後在慢慢補全。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.