JavaScript之Event事件

JavaScript 事件是由訪問 Web 頁面的用戶引起的一系列操作。當(dāng)用戶執(zhí)行某些操作的時候,再去執(zhí)行一系列代碼?;蛘哂脕慝@取事件的詳細(xì)信息,如鼠標(biāo)位置、鍵盤按鍵

JavaScript 有三種事件模型:內(nèi)聯(lián)模型、腳本模型和 DOM2 模型。

內(nèi)聯(lián)模型

這種模型是最傳統(tǒng)接單的一種處理事件的方法。 在內(nèi)聯(lián)模型中, 事件處理函數(shù)是 HTML標(biāo)簽的一個屬性,用于處理指定事件。雖然內(nèi)聯(lián)在早期使用較多,但它是和 HTML 混寫的 ,并沒有與 HTML 分離。

腳本模型

由于內(nèi)聯(lián)模型違反了 HTML 與 JavaScript 代碼層次分離的原則。為了解決這個問題, 在 JavaScript 中處理事件。這種處理方式就是腳本模型。


事件處理函數(shù)

javaScript可以處理的事件類型為:鼠標(biāo)事件、鍵盤事件、HTML事件

所有的事件處理函數(shù)都會都有兩個部分組成,on + 事件名稱


鼠標(biāo)事件:

onclick:用戶單擊鼠標(biāo)按鈕或按下回車鍵時觸發(fā)

ondblclick:當(dāng)用戶雙擊主鼠標(biāo)按鈕時觸發(fā)

onmousedown:當(dāng)用戶按下鼠標(biāo)還未彈起時觸發(fā)

onmouseup:當(dāng)用戶釋放鼠標(biāo)按鈕時觸發(fā)

onmouseover:當(dāng)鼠標(biāo)移到某個元素上方時觸發(fā)

onmouseout:當(dāng)鼠標(biāo)移出某個元素上方時觸發(fā)

onmousemove:當(dāng)鼠標(biāo)指針在元素上移動時觸發(fā)?


鍵盤事件

onkeydown:當(dāng)用戶按下鍵盤上任意鍵觸發(fā),如果按住不放,會重復(fù)觸發(fā)。onkeypress:當(dāng)用戶按下鍵盤上的字符鍵觸發(fā),如果按住不放,會重復(fù)觸發(fā)onkeyup:當(dāng)用戶釋放鍵盤上的鍵觸發(fā)


HTML 事件

onload:當(dāng)頁面完全加載后在 window 上面觸發(fā),或當(dāng)框架集加載完畢后在框架集上觸發(fā)。

onselect:當(dāng)用戶選擇文本框(input 或 textarea)中的一個或多個字符觸發(fā)

onchange:當(dāng)文本框(input 或 textarea)內(nèi)容改變且失去焦點后觸發(fā)

onfocus:當(dāng)頁面或者元素獲得焦點時在 window 及相關(guān)元素上面觸發(fā)?

onblur:當(dāng)頁面或元素失去焦點時在 window 及相關(guān)元素上觸發(fā)

onsubmit:當(dāng)用戶點擊提交按鈕在<form>元素上觸發(fā)

onreset:當(dāng)用戶點擊重置按鈕在<form>元素上觸發(fā)

onresize:當(dāng)窗口或框架的大小變化時在 window 或框架上觸發(fā)

onscroll:當(dāng)用戶滾動帶滾動條的元素時觸發(fā)


什么是事件對象

當(dāng)觸發(fā)某個事件時,會產(chǎn)生一個事件對象,這個對象包含著所有與事件有關(guān)的信息 。包括導(dǎo)致事件的元素、事件的類型、以及其它與特定事件相關(guān)的信息

通過事件綁定的執(zhí)行函數(shù)是可以得到一個隱藏參數(shù)的 。說明,瀏覽器會自動分配一個參數(shù),這個參數(shù)其實就是 event 對象

直接接收 event 對象,是 W3C 的做法,IE 不支持,IE 自己定義了一個 event 對象,直接在 window.event 獲取即可。

input.onclick = function (evt) {

var oEvent = evt || window.event; //實現(xiàn)跨瀏覽器兼容獲取 event 對象

alert(oEvent );};


鼠標(biāo)事件

clientX 可視區(qū) X 坐標(biāo),距離左邊框的位置

clientY 可視區(qū) Y 坐標(biāo),距離上邊框的位置

screenX 屏幕區(qū) X 坐標(biāo),距離左屏幕的位置

screenY 屏幕區(qū) Y 坐標(biāo),距離上屏幕的位置

keyCode

??? 獲取用戶按下鍵盤的哪個按鍵

??? 例子:鍵盤控制Div移動

其他屬性?? ctrlKey、shiftKey、altKey

??? 例子:提交留言

??? 回車 提交???????? ctrl+回車 提交

??? 例子:? 只能輸入數(shù)字的輸入框

??? keydown、keyup事件的區(qū)別


默認(rèn)行為contextmenu

當(dāng)我們右擊網(wǎng)頁的時候,會自動出現(xiàn) windows 自帶的

菜單。那么我們可以使用 contextmenu 事件來修改我們指定的菜單,但前提是把右擊的默認(rèn)行為取消掉

阻止默認(rèn)行為

??? 普通寫法:return false;


事件冒泡,是從里往外逐個觸發(fā)。

事件捕獲,是從外往里逐個觸發(fā)。

阻止冒泡:

??? window.event? window.event.cancelBubble = true : oEvent.stopPropagation();


事件委托:利用冒泡的原理,把事件加到父級上,觸發(fā)執(zhí)行效果

好處

??? 1.提高性能

??? 2.新添加的元素,還會有之前的事件

event對象:事件源:不管在那個事件中,只要你操作的那個元素就是事件源

ie : window.event.srcElement? 標(biāo)準(zhǔn)下 :event.target

nodeName : 找到當(dāng)前元素的標(biāo)簽名


事件綁定分為兩種:一種是傳統(tǒng)事件綁定(內(nèi)聯(lián)模型,腳本模型),一種是現(xiàn)代事件綁定(DOM2 級模型)?,F(xiàn)代事件綁定在傳統(tǒng)綁定上提供了更強大更方便的功能。


W3C? 事件處理函數(shù)

“DOM2 級事件”定義了兩個方法,用于添加事件和刪除事件處理程序的操作:

addEventListener()和 removeEventListener()。所有 DOM 節(jié)點中都包含這兩個方法,并且它們都接受 3 個參數(shù);事件名、函數(shù)、冒泡或捕獲的布爾值(true 表示捕獲,false 表示冒泡)。

W3C 的現(xiàn)代事件綁定的特點 : 1.不需要自定義了;2.可以屏蔽相同的函數(shù);3.可以設(shè)置冒泡和捕獲。


IE? 事件處理函數(shù)

IE 實現(xiàn)了與 DOM 中類似的兩個方法:attachEvent()和 detachEvent()。這兩個方法接受相同的參數(shù):事件名稱和函數(shù)

IE 中的 this 的指向在這里會出錯,所以要使用window.event.srcElement。


區(qū)別:1.IE 不支持捕獲,只支持冒泡;

??????????2.IE 添加事件不能屏蔽重復(fù)的函數(shù);

??????????3.IE 中的 this 指向的是 window 而不是 DOM 對象。

????????? 4.在傳統(tǒng)事件上,IE 是無法接受到 event 對象的,但使用了 attchEvent()卻可以,但有些區(qū)別

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

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

  • JavaScript 程序采用了異步事件驅(qū)動編程模型。在這種程序設(shè)計風(fēng)格下,當(dāng)文檔、瀏覽器、元素或與之相關(guān)的對象發(fā)...
    劼哥stone閱讀 1,330評論 3 11
  • 以下文章為轉(zhuǎn)載,對理解JavaScript中的事件處理機制很有幫助,淺顯易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy閱讀 3,164評論 1 10
  • 13.1 事件流 “DOM2級事件”規(guī)定事件流包括3個階段:事件捕獲階段,處于目標(biāo)階段,事件冒泡階段。事件捕獲表示...
    Elevens_regret閱讀 526評論 0 0
  • 事件處理程序在應(yīng)用中是必不可少的,雖然現(xiàn)在很多框架都有自己實現(xiàn)事件處理方法,但是熟知原生才能讓我們應(yīng)對各種各樣的需...
    俗三瘋閱讀 364評論 0 1
  • 這兩天關(guān)注之所以會關(guān)注到這樣的一些詞:否極泰來,柳暗花明、絕處逢生、苦盡甘來,禍兮福之所倚……是因為自己在工作中的...
    蔥小米閱讀 462評論 0 0

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