真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JS中的事件對(duì)象Event實(shí)例分析

這篇文章主要講解了“JS中的事件對(duì)象Event實(shí)例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“JS中的事件對(duì)象Event實(shí)例分析”吧!

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、陵城ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的陵城網(wǎng)站制作公司

JS中的事件對(duì)象Event實(shí)例分析

一、什么是事件對(duì)象 Event

??每一個(gè)事件觸發(fā)時(shí),都會(huì)產(chǎn)生一個(gè)與之對(duì)應(yīng)的事件對(duì)象 event ,其中包含了觸發(fā)事件的元素、鍵盤鼠標(biāo)的狀態(tài)、位置等等內(nèi)容。

??每當(dāng)用戶觸發(fā)一個(gè)事件后,JS 就會(huì)自動(dòng)生成一個(gè) event 對(duì)象,根據(jù)觸發(fā)事件的不同,這個(gè)對(duì)象包含的內(nèi)容也不同,比如通過鼠標(biāo)觸發(fā)點(diǎn)擊事件,會(huì)產(chǎn)生一個(gè) MouseEvent 對(duì)象,其中包含了鼠標(biāo)的位置等內(nèi)容;通過鍵盤觸發(fā)事件,會(huì)產(chǎn)生一個(gè) KeyboardEvent 對(duì)象其中包含按鍵相關(guān)的信息。

  • event 對(duì)象代表事件的狀態(tài),比如觸發(fā)事件的元素、鍵盤按鍵的狀態(tài)、鼠標(biāo)的位置、鼠標(biāo)按鍵的狀態(tài)等等;

  • event 對(duì)象是一個(gè)隱式參數(shù),并且只在事件發(fā)生的過程中才有效;

  • event 對(duì)象根據(jù)觸發(fā)方式的不同會(huì)具有不同的屬性,也就是說某些屬性只對(duì)特定事件有效,但所有內(nèi)容都是繼承自 Event 對(duì)象;

  • event 對(duì)象在 IEChrome 等瀏覽器表現(xiàn)不盡相同,例如說 event.target 表示觸發(fā)事件的元素,在 IE 中需要使用 event.srcElement 獲?。?/p>

Event對(duì)象本身就是一個(gè)構(gòu)造函數(shù),可以用來(lái)生成新的實(shí)例。

event = new Event(type, options);

Event構(gòu)造函數(shù)接受兩個(gè)參數(shù)。第一個(gè)參數(shù)type是字符串,表示事件的名稱;第二個(gè)參數(shù)options是一個(gè)對(duì)象,表示事件對(duì)象的配置。該對(duì)象主要有下面兩個(gè)屬性。

  • bubbles:布爾值,可選,默認(rèn)為false,表示事件對(duì)象是否冒泡。

  • cancelable:布爾值,可選,默認(rèn)為false,表示事件是否可以被取消,即能否用Event.preventDefault()取消這個(gè)事件。一旦事件被取消,就好像從來(lái)沒有發(fā)生過,不會(huì)觸發(fā)瀏覽器對(duì)該事件的默認(rèn)行為。

var ev = new Event(
  'look',
  {
    'bubbles': true,
    'cancelable': false
  }
);
document.dispatchEvent(ev);

上面代碼新建一個(gè)look事件實(shí)例,然后使用dispatchEvent方法觸發(fā)該事件。

注意,如果不是顯式指定bubbles屬性為true,生成的事件就只能在“捕獲階段”觸發(fā)監(jiān)聽函數(shù)。

// HTML 代碼為
// 

Hello

var div = document.querySelector('div'); var p = document.querySelector('p'); function callback(event) {   var tag = event.currentTarget.tagName;   console.log('Tag: ' + tag); // 沒有任何輸出 } div.addEventListener('click', callback, false); var click = new Event('click'); p.dispatchEvent(click);

上面代碼中,p元素發(fā)出一個(gè)click事件,該事件默認(rèn)不會(huì)冒泡。div.addEventListener方法指定在冒泡階段監(jiān)聽,因此監(jiān)聽函數(shù)不會(huì)觸發(fā)。如果寫成div.addEventListener('click', callback, true),那么在“捕獲階段”可以監(jiān)聽到這個(gè)事件。

另一方面,如果這個(gè)事件在div元素上觸發(fā)。

div.dispatchEvent(click);

那么,不管div元素是在冒泡階段監(jiān)聽,還是在捕獲階段監(jiān)聽,都會(huì)觸發(fā)監(jiān)聽函數(shù)。因?yàn)檫@時(shí)div元素是事件的目標(biāo),不存在是否冒泡的問題,div元素總是會(huì)接收到事件,因此導(dǎo)致監(jiān)聽函數(shù)生效。

二、Event 屬性

??我們?cè)谇懊嫣岬?,根?jù)觸發(fā)方式的不同 event 對(duì)象會(huì)具有不同的屬性,我們可以將其大體分為四部分:

通用屬性 (無(wú)論是通過鍵盤還是鼠標(biāo)觸發(fā)都擁有的屬性)

??點(diǎn)擊列表1后,控制臺(tái)打印如下結(jié)果:
JS中的事件對(duì)象Event實(shí)例分析

鼠標(biāo)屬性

鍵盤屬性

IE屬性

三、Event 方法

??如果想要阻止事件元素的默認(rèn)行為,例如點(diǎn)擊 標(biāo)簽時(shí)執(zhí)行點(diǎn)擊事件,不要跳轉(zhuǎn)鏈接,需要在事件處理程序中調(diào)用 preventDefault 方法:

百度一下,你就知道

??如果想要阻止事件冒泡,例如點(diǎn)擊子元素標(biāo)簽時(shí)執(zhí)行子元素的點(diǎn)擊事件,而不想要執(zhí)行父級(jí)元素的事件處理程序,則需要調(diào)用 stopPropagation 方法:

  • 不要觸發(fā) ul 的點(diǎn)擊事件處理程序

其他相關(guān)方法

  • addEventListener() 給目標(biāo)元素注冊(cè)監(jiān)聽事件;

  • createEvent() 創(chuàng)建一個(gè) Event 對(duì)象;

  • dispatchEvent() 將事件發(fā)送到目標(biāo)元素的監(jiān)聽器上;

  • handleEvent() 把任意對(duì)象注冊(cè)為事件處理程序;

  • initMouseEvent() 初始化鼠標(biāo)事件對(duì)象的值;

  • initKeyboardEvent() 初始化鍵盤事件對(duì)象的值;

  • initMutationEvent() 初始變動(dòng)事件和 HTML 事件對(duì)象的值;

  • initCustomEvent() 初始自定義事件對(duì)象的值;

  • removeEventListener() 刪除目標(biāo)元素上的某個(gè)監(jiān)聽事件;


另外關(guān)于 createEvent 方法,根據(jù)傳入?yún)?shù)的不同,會(huì)返回不同的 event 對(duì)象:

  • MouseEvents 創(chuàng)建鼠標(biāo)事件對(duì)象,返回的對(duì)象中包含 initMouseEvent() 方法;

  • KeyboardEvent 創(chuàng)建鍵盤事件對(duì)象,返回的對(duì)象中包含 initKeyEvent() 方法;

  • KeyEventsfirefox 中創(chuàng)建鍵盤事件對(duì)象需要傳入該參數(shù);

  • MutationEvents 模擬變動(dòng)事件和 HTML 事件的事件對(duì)象,返回的對(duì)象中包含 initMutationEvent 方法;

  • CustomEvent 創(chuàng)建自定義事件對(duì)象,返回的對(duì)象中包含 initCustomEvent() 方法;

四、模擬事件

4.1 模擬鼠標(biāo)事件

??我們可以通過 createEvent() 方法可以創(chuàng)建一個(gè)新的 event 對(duì)象,借助 initMouseEvent() 方法來(lái)對(duì)這個(gè)鼠標(biāo)事件對(duì)象的值進(jìn)行初始化,該方法接受十五個(gè)參數(shù),分別與鼠標(biāo)事件中的各個(gè)屬性一一對(duì)應(yīng),按照 type、bubblescancelableview、detail、screenX、screenY、clientXclientY、ctrlKey、altKey、shiftKey、、metaKey、buttonrelatedTarget 的順序傳入即可:

var oBtn = document.querySelector("button");
// 為 button 綁定事件處理程序
oBtn.addEventListener("click", function () {
    console.log(event);
})

var event = document.createEvent("MouseEvents");
// 通過 initMouseEvent() 方法初始化鼠標(biāo)事件的 event 對(duì)象
event.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
// 通過 dispatchEvent() 方法來(lái)觸發(fā) oBtn 上綁定的點(diǎn)擊事件,此時(shí)瀏覽器打印的 event 對(duì)象為自定義的 event
oBtn.dispatchEvent(event);

??初始化事件對(duì)象時(shí),最重要的是前四個(gè)參數(shù),因?yàn)闉g覽器在觸發(fā)事件時(shí),這四個(gè)參數(shù)是必須的,而剩余的參數(shù)只有在事件處理程序中才會(huì)被使用,target 會(huì)在執(zhí)行 dispatchEvent 方法時(shí)自動(dòng)賦值;

4.2 模擬鍵盤事件

??同樣需要先使用 createEvent() 方法可以創(chuàng)建一個(gè)新的 event 對(duì)象,但需要使用 initKeyEvent 來(lái)對(duì)鍵盤事件對(duì)象的值進(jìn)行初始化,該方法接收八個(gè)參數(shù),分別于鍵盤事件對(duì)象中的各個(gè)屬性一一對(duì)應(yīng),按照 type、bubblescancelable、view、key、locationmodifiers、repeat的順序傳入即可。但在 firefox 中,需要按照 typebubbles、cancelableview、ctrlKeyaltKey、shiftKey metaKey keyCode charCode ` 的順序傳入十個(gè)參數(shù)

document.onkeydown = function () {
    console.log(event);
}

var event = document.createEvent("KeyboardEvent");
event.initKeyboardEvent("keydown", false, false, document.defaultView, "a", 0, "Shift", 0);
document.dispatchEvent(event);

4.3 模擬其他事件

??如果想要模擬其他事件,諸如 submit、focusHTML 和變動(dòng)事件,則需要通過 MutationEvents 方法來(lái)創(chuàng)建事件,通過 initEvent 方法來(lái)進(jìn)行初始化,按照type、bubbles、cancelable、relatedNode、preValue、newValueattrName、attrChange的順序傳入?yún)?shù)。



4.4 自定義 DOM 事件

??自定義事件不是由 DOM 原生觸發(fā)的,它的目的是讓開發(fā)人員創(chuàng)建自己的事件。要?jiǎng)?chuàng)建新的自定義事件,可以調(diào)用 createEvent("CustomEvent"),返回的對(duì)象有一個(gè)名為 initCustomEvent() 的方法,接收 type、bubbles、cancelable、detail 四個(gè)參數(shù)。

var oInput = document.querySelector("input");

oInput.addEventListener("myEvent", function () {
	console.log(event);
})

var event = document.createEvent("CustomEvent");
event.initCustomEvent("myEvent", true, false, "自定義事件myEvent");
oInput.dispatchEvent(event);

??上方代碼創(chuàng)建了一個(gè)自定義事件,事件名為 myEvent , 該事件可以向上冒泡,不可以執(zhí)行在瀏覽器中的默認(rèn)行為, detail 屬性的值為 自定義事件myEvent,可以在綁定該事件的元素或者元素的父級(jí)元素上綁定事件處理程序來(lái)查看 event 對(duì)象。

五、Event的兼容性處理

??主要考慮到 IE 瀏覽器與 Chrome 等瀏覽器事件對(duì)象的區(qū)別,針對(duì)下面四個(gè)屬性,需要進(jìn)行特殊處理:

  • 獲得 event 對(duì)象
    var event = event || window.event;

  • 獲得 target 對(duì)象
    var target = event.target || event.srcElement;

  • 阻止瀏覽器默認(rèn)行為
    event.preventDefault ? event.preventDefault() : (event.returnValue = false);

  • 阻止事件冒泡
    event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true)。

感謝各位的閱讀,以上就是“JS中的事件對(duì)象Event實(shí)例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)JS中的事件對(duì)象Event實(shí)例分析這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)頁(yè)名稱:JS中的事件對(duì)象Event實(shí)例分析
網(wǎng)頁(yè)路徑:http://weahome.cn/article/pcojgo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部