DOM模型(七)—— 事件類型

本節(jié)介紹各種常見的瀏覽器事件。

一、鼠標(biāo)事件


鼠標(biāo)事件指與鼠標(biāo)相關(guān)的事件,主要有以下一些。

1.1、click事件,dblclick事件

當(dāng)用戶在Element節(jié)點(diǎn),document節(jié)點(diǎn),window對象上單擊鼠標(biāo)(或按下回車鍵)時(shí),click事件觸發(fā)。

“鼠標(biāo)單擊”定義為,用戶在同一位置完成一次mousedown動作和mouseup動作。它們的觸發(fā)順序是:mousedown首先觸發(fā),mouseup接著觸發(fā),click最后觸發(fā)。

下面是一個(gè)設(shè)置click事件監(jiān)聽函數(shù)的例子。

div.addEventListener("click", function( event ) {
  // 顯示在該節(jié)點(diǎn),鼠標(biāo)連續(xù)點(diǎn)擊的次數(shù)
  event.target.innerHTML = "click count: " + event.detail;
}, false);

dblclick事件當(dāng)用戶在element、document、window對象上,雙擊鼠標(biāo)時(shí)觸發(fā)。該事件在mousedown、mouseupclick之后觸發(fā)。

1.2、mouseup事件,mousedown事件,mousemove事件

mousedown事件在按下鼠標(biāo)鍵時(shí)觸發(fā)。
mouseup事件在釋放按下的鼠標(biāo)鍵時(shí)觸發(fā)。
mousemove事件當(dāng)鼠標(biāo)在一個(gè)節(jié)點(diǎn)內(nèi)部移動時(shí)觸發(fā)。當(dāng)鼠標(biāo)持續(xù)移動時(shí),該事件會連續(xù)觸發(fā)。為了避免性能問題,建議對該事件的監(jiān)聽函數(shù)做一些限定,比如限定一段時(shí)間內(nèi)只能運(yùn)行一次代碼。

1.3、mouseover事件,mouseenter事件

mouseover事件和mouseenter事件,都是鼠標(biāo)進(jìn)入一個(gè)節(jié)點(diǎn)時(shí)觸發(fā)。

兩者的區(qū)別是,mouseenter事件只觸發(fā)一次,而只要鼠標(biāo)在節(jié)點(diǎn)內(nèi)部移動,mouseover事件會在子節(jié)點(diǎn)上觸發(fā)多次。

// HTML代碼為
// <ul id="test">
//   <li>item 1</li>
//   <li>item 2</li>
//   <li>item 3</li>
// </ul>

var test = document.getElementById('test');

// 進(jìn)入test節(jié)點(diǎn)以后,該事件只會觸發(fā)一次
// event.target 是 ul 節(jié)點(diǎn)
test.addEventListener('mouseenter', function (event) {
  event.target.style.color = 'purple';
  setTimeout(function () {
    event.target.style.color = '';
  }, 500);
}, false);

// 進(jìn)入test節(jié)點(diǎn)以后,只要在子Element節(jié)點(diǎn)上移動,該事件會觸發(fā)多次
// event.target 是 li 節(jié)點(diǎn)
test.addEventListener('mouseover', function (event) {
  event.target.style.color = 'orange';
  setTimeout(function () {
    event.target.style.color = '';
  }, 500);
}, false);

1.4、mouseout事件,mouseleave事件

mouseout事件和mouseleave事件,都是鼠標(biāo)離開一個(gè)節(jié)點(diǎn)時(shí)觸發(fā)。

兩者的區(qū)別是,mouseout事件會冒泡,mouseleave事件不會。子節(jié)點(diǎn)的mouseout事件會冒泡到父節(jié)點(diǎn),進(jìn)而觸發(fā)父節(jié)點(diǎn)的mouseout事件。mouseleave事件就沒有這種效果,所以離開子節(jié)點(diǎn)時(shí),不會觸發(fā)父節(jié)點(diǎn)的監(jiān)聽函數(shù)。

1.5、contextmenu事件

contextmenu事件在一個(gè)節(jié)點(diǎn)上點(diǎn)擊鼠標(biāo)右鍵時(shí)觸發(fā),或者按下“上下文菜單”鍵時(shí)觸發(fā)。

二、MouseEvent對象


2.1、概述

2.1、概述

2.1、概述

2.1、概述

2.1、概述

三、wheel事件


wheel事件是與鼠標(biāo)滾輪相關(guān)的事件,目前只有一個(gè)wheel事件。用戶滾動鼠標(biāo)的滾輪,就觸發(fā)這個(gè)事件。

該事件除了繼承了MouseEvent、UIEvent、Event的屬性,還有幾個(gè)自己的屬性。

  • deltaX:返回一個(gè)數(shù)值,表示滾輪的水平滾動量。
  • deltaY:返回一個(gè)數(shù)值,表示滾輪的垂直滾動量。
  • deltaZ:返回一個(gè)數(shù)值,表示滾輪的Z軸滾動量。
  • deltaMode:返回一個(gè)數(shù)值,表示滾動的單位,適用于上面三個(gè)屬性。0表示像素,1表示行,2表示頁。

瀏覽器提供一個(gè)WheelEvent構(gòu)造函數(shù),可以用來生成滾輪事件的實(shí)例。它接受兩個(gè)參數(shù),第一個(gè)是事件名稱,第二個(gè)是配置對象。

var  syntheticEvent = new WheelEvent("syntheticWheel",  {"deltaX": 4, "deltaMode": 0});

四、鍵盤事件


五、進(jìn)度事件


六、拖拉事件


七、觸摸事件


觸摸API由三個(gè)對象組成。

Touch
TouchList
TouchEvent

八、表單事件


8.1、Input事件,select事件,change事件

以下事件與表單成員的值變化有關(guān)。
(1)、input事件
input事件當(dāng)<input>、<textarea>的值發(fā)生變化時(shí)會觸發(fā)。此外,打開contenteditable屬性的元素,只要值發(fā)生變化,也會觸發(fā)input事件。

input事件的一個(gè)特點(diǎn),就是會連續(xù)觸發(fā),比如用戶沒次按下一次按鍵,就會觸發(fā)一次input事件。

(2)、select事件
select事件當(dāng)在<input>、<textarea>中選中文本時(shí)觸發(fā)。

(3)、Change事件
Change事件當(dāng)<input>、<select>、<textarea>的值發(fā)生變化時(shí)觸發(fā)。它與input事件的最大不同,就是不會連續(xù)觸發(fā),只有當(dāng)全部修改完成時(shí)才會觸發(fā),而且input事件必然會引發(fā)Change事件。

8.2、reset事件,submit事件

以下事件發(fā)生在表單對象上,而不是發(fā)生在表單的成員上。
(1)、reset事件
reset事件當(dāng)表單重置(所有表單成員變回默認(rèn)值)時(shí)觸發(fā)。

(2)、submit事件
submit事件當(dāng)表單數(shù)據(jù)向服務(wù)器提交時(shí)觸發(fā)。注意,submit事件的發(fā)生對象是form元素,而不是button元素(即使它的類型是submit),因?yàn)樘峤坏氖潜韱?,而不是按鈕。

九、文檔事件


9.1、beforeunload事件,unload事件,load事件,error事件,pageshow事件,pagehide事件

以下事件與網(wǎng)頁的加載與卸載相關(guān)。
(1)、beforeunload事件

(2)、unload事件

(3)、load事件,error事件

(4)、pageshow事件,pagehide事件

9.2、DOMContentLoaded事件,readystatechange事件

以下事件與文檔狀態(tài)相關(guān)。

(1)、DOMContentLoaded事件

(2)、readystatechange事件

9.3、scroll事件,resize事件

以下事件與窗口行為有關(guān)。
(1)、scroll事件
scroll事件在文檔或文檔元素滾動時(shí)觸發(fā),主要出現(xiàn)在用戶拖動滾動條。

window.addEventListener('scroll', callback);

由于該事件會連續(xù)地大量觸發(fā),所以它的監(jiān)聽函數(shù)之中不應(yīng)該有非常耗費(fèi)計(jì)算的操作。推薦的做法是使用 requestAnimationFrame或setTimeout控制該事件的觸發(fā)頻率,然后可以結(jié)合customEvent拋出一個(gè)新事件。

(2)、resize事件
resize事件在改變?yōu)g覽器窗口大小時(shí)觸發(fā),發(fā)生在window、body、frameset對象上面。

該事件也會連續(xù)地大量觸發(fā),所以最好像上面的scroll事件一樣,通過throttle函數(shù)控制事件觸發(fā)頻率。

9.4、hashchange事件,popstate事件

以下事件與文檔的URL變化相關(guān)。
(1)、hashchange事件

(2)、popstate事件

9.5、cut事件,copy事件,paste事件

以下三個(gè)事件屬于文本操作觸發(fā)的事件。

  • cut事件:在將選中的內(nèi)容從文檔中移除,加入剪貼板后觸發(fā)。
  • copy事件:在選中的內(nèi)容加入剪貼板后觸發(fā)。
  • paste事件:在剪貼板內(nèi)容被粘貼到文檔后觸發(fā)。

9.6、焦點(diǎn)事件

以下事件與文檔的URL變化相關(guān)。
(1)、hashchange事件

(2)、popstate事件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,713評論 2 10
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,499評論 0 8
  • 第1章 鼠標(biāo)事件 1-1 jQuery鼠標(biāo)事件之click與dbclick事件 用交互操作中,最簡單直接的操作就是...
    mo默22閱讀 1,342評論 0 6
  • 十月一號做的沙盤實(shí)驗(yàn) 這是四個(gè)跳舞的女孩子 這一周討論了一個(gè)讓我感觸很深的話題——優(yōu)秀 老師問我,覺得這四個(gè)女孩子...
    小貓咪不吃大鯉魚閱讀 325評論 0 0
  • 早晨涂上love推薦的蘭芝雙色口紅,自拍了一張,微信發(fā)給了love,道一聲早安,希望一起美美地開啟這一天,她說她在...
    傅小白的心寶計(jì)劃閱讀 618評論 0 0

友情鏈接更多精彩內(nèi)容