摘要:所有節(jié)點(diǎn)中都包含這兩個(gè)方法,并且它們都接受個(gè)參數(shù)要處理的事件名,作為事件處理程序的函數(shù)和一個(gè)布爾值。和支持這個(gè)事件。
事件 事件流
事件流描述的是從頁(yè)面中接收事件的順序
事件冒泡IE的事件流叫做事件冒泡,即事件開(kāi)始時(shí)由最具體的元素(文檔中嵌套層次最深的那個(gè)節(jié)點(diǎn))接收,然后逐級(jí)向上傳播到較為不具體的節(jié)點(diǎn)
事件捕獲的思想是不太具體的節(jié)點(diǎn)應(yīng)該更早接收到事件,而最具體的節(jié)點(diǎn)應(yīng)該最后接收到事件,事件捕獲的用意在于在事件到達(dá)預(yù)定目標(biāo)之前捕獲它。
DOM2級(jí)事件規(guī)定的事件流包括三個(gè)階段:事件捕獲階段,處于目標(biāo)階段和事件冒泡階段
某個(gè)元素支持的每種事件都可以使用一個(gè)與相應(yīng)事件處理程序同名的HTML特性來(lái)指定,這個(gè)特性的值應(yīng)該是能夠執(zhí)行的JavaScript代碼
DOM0級(jí)事件處理程序
每個(gè)元素,包括window和document都有自己的事件處理程序?qū)傩?,這些屬性通常全部小寫
var btn=document.getElementById("myBtn"); btn.onclick=function(){ alert("Clicked"); };DOM2級(jí)事件處理程序
DOM2級(jí)事件定義了兩個(gè)方法,用于處理指定和刪除事件處理程序的操作,addEventListener()和removeEventListener()。所有DOM節(jié)點(diǎn)中都包含這兩個(gè)方法,并且它們都接受3個(gè)參數(shù):要處理的事件名,作為事件處理程序的函數(shù)和一個(gè)布爾值。最后這個(gè)布爾值參數(shù)如果是true,表示在捕獲階段調(diào)用事件處理程序,如果是false,表示在冒泡階段調(diào)用事件處理程序
var btn=document.getElementById("myBtn"); btn.addEventListener("click",function()){ alert(this.id); },false); btn.addEventListener("click",function(){ alert("Hello world!"); },false)
通過(guò)addEventListener()添加的事件處理程序只能使用removeEventListener()來(lái)移除,移除時(shí)傳入的參數(shù)與添加處理程序時(shí)使用的參數(shù)相同,這也意味著通過(guò)addEventListener()來(lái)添加的匿名函數(shù)將無(wú)法移除
IE事件處理程序IE實(shí)現(xiàn)了與DOM中蕾西的兩個(gè)方法,attachEvent()和detachEvent()。這兩個(gè)方法接收相同的兩個(gè)參數(shù),事件處理程序和事件處理程序函數(shù)
跨瀏覽器的事件處理程序要保證處理事件的代碼能在大多數(shù)瀏覽器下一致地運(yùn)行,只需關(guān)注冒泡階段
第一個(gè)要?jiǎng)?chuàng)建的方法是addHandler(),它的職責(zé)是視情況分別使用DOM0級(jí)方法,DOM2級(jí)方法或IE方法來(lái)添加時(shí)間,這個(gè)方法屬于一個(gè)名叫EventUtil的對(duì)象。addHandler()方法接收3個(gè)參數(shù):要操作的元素、事件名稱和事件處理程序函數(shù)
與addHandler()對(duì)應(yīng)的方法是removeHandler()它也接收相同的參數(shù),這個(gè)方法的職責(zé)是移除之前添加的事件處理程序,無(wú)論事件處理程序時(shí)采取什么方式添加到元素中的,如果其他方法無(wú)效,默認(rèn)采用DOM0級(jí)方法
事件對(duì)象 DOM中的事件對(duì)象兼容DOM的瀏覽器會(huì)將一個(gè)event對(duì)象傳入到事件處理程序中,無(wú)論指定事件處理程序使用什么方法,都會(huì)傳入event對(duì)象
DOM3級(jí)事件規(guī)定以下幾類事件
UI事件,當(dāng)用戶與頁(yè)面上的元素交互時(shí)觸發(fā)
焦點(diǎn)事件,當(dāng)元素獲得或失去焦點(diǎn)時(shí)觸發(fā)
鼠標(biāo)事件,當(dāng)用戶通過(guò)鼠標(biāo)在頁(yè)面上執(zhí)行操作時(shí)觸發(fā)
滾輪事件,當(dāng)使用鼠標(biāo)滾輪時(shí)觸發(fā)
文本事件,當(dāng)在文檔中輸入文本時(shí)觸發(fā)
鍵盤事件,當(dāng)用戶通過(guò)鍵盤在頁(yè)面上執(zhí)行操作時(shí)觸發(fā)
合成事件,當(dāng)為IME輸入字符時(shí)觸發(fā)
變動(dòng)事件,當(dāng)?shù)讓覦OM結(jié)構(gòu)發(fā)生變化時(shí)觸發(fā)
變動(dòng)名稱事件,當(dāng)元素或?qū)傩悦儎?dòng)時(shí)觸發(fā),已廢棄
UI事件
UI事件指的是那些不一定與用戶操作有關(guān)的事件
DOMActivate,表示元素已經(jīng)被用戶操作,通過(guò)鼠標(biāo)或鍵盤激活
load,當(dāng)頁(yè)面完全加載后在window上面觸發(fā),當(dāng)所有的框架都加載完畢時(shí)在框架集上面觸發(fā),當(dāng)圖像加載完畢時(shí)在元素上觸發(fā),或者嵌入的內(nèi)容加載完畢時(shí)在
unload,當(dāng)頁(yè)面完全卸載后在window上面觸發(fā),當(dāng)左右框架都卸載后在框架上面觸發(fā),或者當(dāng)嵌入的內(nèi)容卸載完畢后在
abort,在用戶停止下載過(guò)程時(shí),如果嵌入的內(nèi)容沒(méi)有加載完,則在
error,當(dāng)大聲在JavaScript錯(cuò)誤時(shí)在window上面觸發(fā),當(dāng)無(wú)法加載圖像時(shí)在元素上面觸發(fā),當(dāng)無(wú)法加載嵌入內(nèi)容時(shí),在
select,當(dāng)用戶選擇文本框中一個(gè)或多個(gè)字符時(shí)觸發(fā)
resize,當(dāng)窗口或框架的大小變化時(shí)在window或框架上面觸發(fā)
scroll,當(dāng)用戶滾動(dòng)帶滾動(dòng)條的元素中的內(nèi)容時(shí),在該元素上面觸發(fā),
元素匯總包含所加載頁(yè)面的滾動(dòng)條 焦點(diǎn)事件
焦點(diǎn)事件會(huì)在頁(yè)面元素獲得或失去焦點(diǎn)時(shí)觸發(fā)
blur,在元素失去焦點(diǎn)時(shí)觸發(fā),事件不會(huì)冒泡,所有瀏覽器都支持
DOMFocusIn,在元素獲得焦點(diǎn)時(shí)觸發(fā),這個(gè)時(shí)間與HTML事件focus等價(jià),但是冒泡,只有Opera支持這個(gè)事件,DOM3級(jí)事件廢棄了DOMFocusIn,選擇了focusin
DOMFocusOut,在元素失去焦點(diǎn)時(shí)觸發(fā),這個(gè)事件是HTML事件blur的通用版本,室友Opera支持這個(gè)事件,DOM3級(jí)事件廢棄了DOMFocusOut,選擇了focusout
focus,在元素獲得焦點(diǎn)時(shí)觸發(fā),這個(gè)事件不會(huì)冒泡,所有瀏覽器都支持它
focusin,在元素獲得焦點(diǎn)時(shí)觸發(fā),這個(gè)事件與HTML事件focus等價(jià),但它冒泡,支持這個(gè)事件的瀏覽器有IE5.5+、Safari5.1+、Opera11.5+和Chrome
focusout,在元素失去焦點(diǎn)時(shí)觸發(fā),這個(gè)事件是HTML事件blur的通用版本,支持這個(gè)事件的瀏覽器有IE5.5+、Safari5.1+、Opera11.5+和Chrome
當(dāng)焦點(diǎn)從頁(yè)面中的一個(gè)元素移動(dòng)到另一個(gè)元素
focusout在失去焦點(diǎn)的元素上觸發(fā)
focusin在獲得焦點(diǎn)的元素上觸發(fā)
blur在失去焦點(diǎn)的元素上觸發(fā)
DOMFocusOut在失去焦點(diǎn)的元素上觸發(fā)
focus在獲得焦點(diǎn)的元素上觸發(fā)
DOMFocusIn在獲得焦點(diǎn)的元素上觸發(fā)
鼠標(biāo)與滾輪事件
鼠標(biāo)事件是Web開(kāi)發(fā)中最常用的一類事件
click,在用戶單擊主鼠標(biāo)按鈕(一般是左邊的按鈕)或者按下回車鍵時(shí)觸發(fā)。這一點(diǎn)對(duì)確保易訪問(wèn)性很重要,意味著 onclick 事件處理程序既可以通過(guò)鍵盤也可以通過(guò)鼠標(biāo)執(zhí)行。
dblclick,在用戶雙擊主鼠標(biāo)按鈕(一般是左邊的按鈕)時(shí)觸發(fā)。從技術(shù)上說(shuō),這個(gè)事件并不是 DOM2 級(jí)事件規(guī)范中規(guī)定的,但鑒于它得到了廣泛支持,所以 DOM3 級(jí)事件將其納入了標(biāo)準(zhǔn)。
mousedown,在用戶按下了任意鼠標(biāo)按鈕時(shí)觸發(fā)。不能通過(guò)鍵盤觸發(fā)這個(gè)事件。
mouseenter,在鼠標(biāo)光標(biāo)從元素外部首次移動(dòng)到元素范圍之內(nèi)時(shí)觸發(fā)。這個(gè)事件不冒泡,而且在光標(biāo)移動(dòng)到后代元素上不會(huì)觸發(fā)。DOM2 級(jí)事件并沒(méi)有定義這個(gè)事件,但 DOM3 級(jí)事件將它納入了規(guī)范。IE、Firefox 9+和 Opera 支持這個(gè)事件。
mouseleave,在位于元素上方的鼠標(biāo)光標(biāo)移動(dòng)到元素范圍之外時(shí)觸發(fā)。這個(gè)事件不冒泡,而且在光標(biāo)移動(dòng)到后代元素上不會(huì)觸發(fā)。DOM2 級(jí)事件并沒(méi)有定義這個(gè)事件,但 DOM3 級(jí)事件將它納入了規(guī)范。IE、Firefox 9+和 Opera 支持這個(gè)事件。
mousemove,當(dāng)鼠標(biāo)指針在元素內(nèi)部移動(dòng)時(shí)重復(fù)地觸發(fā)。不能通過(guò)鍵盤觸發(fā)這個(gè)事件。
mouseout,在鼠標(biāo)指針位于一個(gè)元素上方,然后用戶將其移入另一個(gè)元素時(shí)觸發(fā)。又移入的另一個(gè)元素可能位于前一個(gè)元素的外部,也可能是這個(gè)元素的子元素。不能通過(guò)鍵盤觸發(fā)這個(gè)事件。
mouseover,在鼠標(biāo)指針位于一個(gè)元素外部,然后用戶將其首次移入另一個(gè)元素邊界之內(nèi)時(shí)觸發(fā)。不能通過(guò)鍵盤觸發(fā)這個(gè)事件。
mouseup,在用戶釋放鼠標(biāo)按鈕時(shí)觸發(fā)。不能通過(guò)鍵盤觸發(fā)這個(gè)事件。
發(fā)生位置
客戶區(qū)坐標(biāo)位置,clientX和clientY
頁(yè)面坐標(biāo)位置,pageX和pageY
屏幕坐標(biāo)位置,screenX和screenY
修改鍵
規(guī)定4個(gè)屬性,shiftKey、ctrlKey、altKey和metaKey
這些屬性中包含的都是布爾值,如果相應(yīng)的鍵被按下,則值為true,否則為false
鼠標(biāo)按鈕
0,表示沒(méi)有按下按鈕
1,表示按下了主鼠標(biāo)按鈕
2,表示按下了次鼠標(biāo)按鈕
3,表示同時(shí)按下了主、次鼠標(biāo)按鈕
4,表示按下了中間的鼠標(biāo)按鈕
5,表示同時(shí)按下了主鼠標(biāo)按鈕和中間的鼠標(biāo)按鈕
6,表示同時(shí)按下了次鼠標(biāo)按鈕和中間的鼠標(biāo)按鈕
7,表示同時(shí)按下了三個(gè)鼠標(biāo)按鈕
更多的事件信息
altLeft,布爾值,表示是否按下了Alt鍵,如果altLeft值為true,則altKey值也為true
ctrlLeft,布爾值,表示是否按下了Ctrl鍵,如果ctrlLeft值為true,則ctrlKey值為true
offsetX,光標(biāo)相對(duì)于目標(biāo)元素邊界的x坐標(biāo)
offsetY,光標(biāo)相對(duì)于目標(biāo)元素邊界的y坐標(biāo)
shiftLeft,布爾值,表示是否按下了Shift鍵,如果shiftLeft值為true,則shiftKey值為true
鼠標(biāo)滾輪事件
與mousewheel事件對(duì)應(yīng)的event對(duì)象除包含鼠標(biāo)事件的所有標(biāo)準(zhǔn)信息外,還包含一個(gè)特殊的wheelDelta屬性,當(dāng)用戶向前滾動(dòng)鼠標(biāo)滾輪時(shí),wheelDelta是120的倍數(shù),當(dāng)用戶向后滾動(dòng)鼠標(biāo)滾輪時(shí),wheelDelta是-120的倍數(shù)
觸摸設(shè)備
不支持dbclick事件,雙擊瀏覽器窗口會(huì)放大畫面,而且沒(méi)有辦法改變?cè)撔袨?/p>
輕擊可單擊元素會(huì)觸發(fā)mousemove事件,如果此操作會(huì)導(dǎo)致內(nèi)容變化,將不再有其他事件發(fā)生,如果屏幕沒(méi)有因此變化,那么會(huì)一次發(fā)生mousedown、mouseup和click事件,輕擊不可單擊的元素不會(huì)觸發(fā)任何事件,可單擊的元素指的是那些單擊可產(chǎn)生默認(rèn)操作得元素,或者那些已經(jīng)被指定了onclick事件處理程序的元素
mousemove事件也會(huì)觸發(fā)mouseover和mouseout事件
兩個(gè)手指放在屏幕上且頁(yè)面隨手指移動(dòng)而滾動(dòng)時(shí)會(huì)觸發(fā)mousewheel和scroll事件
鍵盤與文本事件
3個(gè)鍵盤事件
keydown,當(dāng)用戶按下鍵盤上的任意鍵時(shí)觸發(fā),而且如果按住不放的話,會(huì)重復(fù)觸發(fā)此事件
keypress,當(dāng)用戶按下鍵盤上的字符鍵時(shí)觸發(fā),而且如果按住不放的話,會(huì)重復(fù)觸發(fā)此事件
keyup,當(dāng)用戶釋放鍵盤上的鍵時(shí)觸發(fā)
鍵碼
textInput事件,event對(duì)象上一個(gè)屬性,叫inputMethod,表示把文本輸入到文本框中的方式
0,表示瀏覽器不確定是怎么輸入的
1,表示是使用鍵盤輸入的
2,表示文本是粘貼進(jìn)來(lái)的
3,表示文本是拖放進(jìn)來(lái)的
4,表示文本是使用IME輸入的
5,表示文本是通過(guò)在表單中選擇某一項(xiàng)輸入的
6,表示文本是通過(guò)手寫輸入的
7,表示文本是通過(guò)語(yǔ)音輸入的
8,表示文本是通過(guò)幾種方法組合輸入的
9,表示文本是通過(guò)腳本輸入的
復(fù)合事件
用于處理IME的輸入序列
compositionstart,在IME的文本復(fù)合系統(tǒng)打開(kāi)時(shí)觸發(fā),表示要開(kāi)始輸入了
compositionupdate,在向輸入字段中插入新字符時(shí)觸發(fā)
compositionend,在IME的文本復(fù)合系統(tǒng)關(guān)閉時(shí)觸發(fā),表示返回正常鍵盤輸入狀態(tài)
復(fù)合事件與文本事件在很多方面都很相似,在觸發(fā)復(fù)合事件時(shí),目標(biāo)是接收文本的輸入字段,但它比文本事件的事件對(duì)象多一個(gè)屬性data
如果compositionstart事件發(fā)生時(shí)訪問(wèn),包含正在編輯的文本
如果在compositionupdate事件發(fā)生時(shí)訪問(wèn),包含正插入的新字符
如果在compositionend事件發(fā)生時(shí)訪問(wèn),包含此次輸入會(huì)話中插入的所有字符
變動(dòng)事件
在DOM中的某一部分發(fā)生變化時(shí)給出提示,變動(dòng)事件是為XML或HTML DOM設(shè)計(jì)的,并不特定某種語(yǔ)言
DOMSubtreeModified,在DOM結(jié)構(gòu)中發(fā)生任何變化時(shí)觸發(fā),這個(gè)事件在其他任何事件觸發(fā)后都會(huì)觸發(fā)
DOMNodeInserted,在一個(gè)節(jié)點(diǎn)作為子節(jié)點(diǎn)被插入到另一個(gè)節(jié)點(diǎn)中時(shí)觸發(fā)
DOMNodeRemoved,在節(jié)點(diǎn)從其父元素中被移除時(shí)觸發(fā)
DOMNodeInsertedIntoDocument,在一個(gè)節(jié)點(diǎn)被直接插入文檔或通過(guò)子樹(shù)間接插入文檔之后觸發(fā)
DOMNodeRemovedFromDocument,在一個(gè)節(jié)點(diǎn)被直接從文檔中移除或通過(guò)子樹(shù)間接從文檔中移除之前觸發(fā)
DOMAttrModified,在特性被修改之后觸發(fā)
DOMCharacterDataModified,在文本節(jié)點(diǎn)的值發(fā)生變化時(shí)觸發(fā)
刪除節(jié)點(diǎn)
在使用removeChild()或replaceChild()從DOM中刪除節(jié)點(diǎn)時(shí),首先會(huì)觸發(fā)DOMNodeRemoved事件
緊隨其后觸發(fā)的是DOMSubtreeModified事件,這個(gè)事件的目標(biāo)是被移除節(jié)點(diǎn)的父節(jié)點(diǎn),此時(shí)的event對(duì)象也不會(huì)提供與事件相關(guān)的其他信息
插入節(jié)點(diǎn)
在使用appendChild()、replaceChild()或insertBefore()向DOM中插入節(jié)點(diǎn)時(shí),首先會(huì)觸發(fā)DOMNodeInserted事件,這個(gè)事件的目標(biāo)是被插入的節(jié)點(diǎn)
緊接著會(huì)在新插入的節(jié)點(diǎn)上面觸發(fā)DOMNodeInsertedIntDocument事件,這個(gè)事件不冒泡,因此必須在插入節(jié)點(diǎn)之前為它添加這個(gè)事件處理程序
最后一個(gè)觸發(fā)的是DOMSubtreeModified,觸發(fā)于新插入節(jié)點(diǎn)的父節(jié)點(diǎn)
HTML5事件contextmenu事件,用以表示何時(shí)應(yīng)該顯示上下文菜單,以便開(kāi)發(fā)人員取消默認(rèn)的上下文菜單而提供自定義的菜單
beforeunload事件,為了讓開(kāi)發(fā)人員有可能在頁(yè)面卸載前阻止這一個(gè)操作,這個(gè)事件會(huì)在瀏覽器卸載頁(yè)面之前觸發(fā),可以通過(guò)它來(lái)取消卸載并繼續(xù)使用原有頁(yè)面
readystatechange事件,目的是提供與文檔或元素加載狀態(tài)有關(guān)的信息,但這個(gè)事件的行為有時(shí)候也難預(yù)料,支持readystatechange事件的每個(gè)對(duì)象都有一個(gè)readyState屬性
uninitialized,對(duì)象存在但尚未初始化
loading,對(duì)象正在加載數(shù)據(jù)
loaded,對(duì)象加載數(shù)據(jù)完成
interactive,可以操作對(duì)象了,但還沒(méi)有完全加載
complete,對(duì)象已經(jīng)加載完畢
pageshow事件,在頁(yè)面顯示時(shí)觸發(fā),無(wú)論該頁(yè)面是否來(lái)自bfcache,在重新加載的頁(yè)面中,pageshow會(huì)在load事件觸發(fā)后觸發(fā),而對(duì)于bfcache中的頁(yè)面,pageshow會(huì)在頁(yè)面狀態(tài)完全恢復(fù)的那一刻觸發(fā)
pagehide事件,在瀏覽器卸載頁(yè)面的時(shí)候觸發(fā),而且是在unload事件之前觸發(fā),與pageshow事件一樣,pagehide在document上面觸發(fā),但其事件處理程序必須要添加到window對(duì)象
hashchange事件,在URL參數(shù)列表發(fā)生變化時(shí),通知開(kāi)發(fā)人員。之所以新增這個(gè)事件,是因?yàn)樵贏jax應(yīng)用中,開(kāi)發(fā)人員經(jīng)常要利用URL參數(shù)列表來(lái)保存狀態(tài)或?qū)Ш叫畔?/p> 設(shè)備事件
orientationchange事件,以便開(kāi)發(fā)人員能夠確定用戶何時(shí)將設(shè)備由橫向查看模式切換為縱向查看模式。0表示肖像模式,90表示向左旋轉(zhuǎn)的橫向模式,-90表示向右旋轉(zhuǎn)的橫向模式
MozOrientation事件,當(dāng)設(shè)備的加速計(jì)檢測(cè)到設(shè)備方向改變時(shí),就會(huì)觸發(fā)這個(gè)事件
event對(duì)象包含三個(gè)屬性,x、y、z,這幾個(gè)屬性的值都介于1到-1之間,表示不同坐標(biāo)軸上的方向。在靜止?fàn)顟B(tài)下,x值為0,y值為0,z值為1。如果設(shè)備向右傾斜,x值會(huì)減??;反之向左傾斜,x值會(huì)增大。類似的,如果設(shè)備向遠(yuǎn)離用戶的方向傾斜,y值會(huì)減小,向接近用戶的方向傾斜,y值會(huì)增大。z軸檢測(cè)垂直加速度,1表示靜止不動(dòng),在設(shè)備移動(dòng)時(shí),值會(huì)減小,失重狀態(tài)下值為0
deviceorientation事件與Mozorientation事件類似,它也是在加速計(jì)檢測(cè)到設(shè)備方向變化時(shí),在window對(duì)象上觸發(fā),而且具有與MozOrientation事件相同的支持限制。不過(guò)deviceorientation事件的意圖是告訴開(kāi)發(fā)人員設(shè)備在空間中朝向哪兒,而不是如何移動(dòng)
觸發(fā)deviceorientation事件時(shí),事件對(duì)象中包含著每個(gè)軸相對(duì)于設(shè)備靜止?fàn)顟B(tài)下發(fā)生變化的信息,包含5個(gè)屬性
alpha,在圍繞z軸旋轉(zhuǎn)時(shí)(左右旋轉(zhuǎn)),y軸的度數(shù)差,是一個(gè)介于0到360之間的浮點(diǎn)數(shù)
beta,在圍繞x軸旋轉(zhuǎn)時(shí)(前后旋轉(zhuǎn)),z軸的度數(shù)差,是一個(gè)介于-180到180度之間的浮點(diǎn)數(shù)
gamma,在圍繞y軸旋轉(zhuǎn)時(shí)(扭轉(zhuǎn)設(shè)備),z軸的度數(shù)差,是一個(gè)介于-90到90之間的浮點(diǎn)數(shù)
absolute,布爾值,表示設(shè)備是否返回一個(gè)絕對(duì)值
compassCalibrated,布爾值,表示設(shè)備的指南針是否校準(zhǔn)過(guò)
devicemotion事件,告訴開(kāi)發(fā)人員設(shè)備什么時(shí)候移動(dòng),而不僅僅是設(shè)備方向如何改變
acceleration,一個(gè)包含x、y和z屬性的對(duì)象,在不考慮重力的情況下,說(shuō)明每個(gè)方向上的加速度
accelerationIncludingGravuty,一個(gè)包含x、y和z屬性的對(duì)象,在考慮z軸自然重力加速度的情況下,說(shuō)明每個(gè)方向上的加速度
interval,以毫秒表示的時(shí)間值,必須在另一個(gè)devicemotion事件觸發(fā)前傳入,這個(gè)值在每個(gè)事件中應(yīng)該是一個(gè)常量
rotationRate,一個(gè)包含表示方向的alpha、beta和gamma屬性的對(duì)象
觸摸與手勢(shì)事件
觸摸事件
touchstart,當(dāng)手指觸摸屏幕時(shí)觸發(fā);即使已經(jīng)有一個(gè)手指放在了屏幕上也會(huì)觸發(fā)。
touchmove,當(dāng)手指在屏幕上滑動(dòng)時(shí)連續(xù)地觸發(fā)。在這個(gè)事件發(fā)生期間,調(diào)用 preventDefault()可以阻止?jié)L動(dòng)。
touchend,當(dāng)手指從屏幕上移開(kāi)時(shí)觸發(fā)。
touchcancel :當(dāng)系統(tǒng)停止跟蹤觸摸時(shí)觸發(fā)。關(guān)于此事件的確切觸發(fā)時(shí)間,文檔中沒(méi)有明確說(shuō)明。
除了常見(jiàn)的DOM屬性之外,觸摸事件還包含三個(gè)用于跟蹤觸摸的屬性
touches,表示當(dāng)前跟蹤的觸摸操作的 Touch 對(duì)象的數(shù)組。
targetTouchs,特定于事件目標(biāo)的 Touch 對(duì)象的數(shù)組。
changeTouches,表示自上次觸摸以來(lái)發(fā)生了什么改變的 Touch 對(duì)象的數(shù)組。
每個(gè)Touch對(duì)象包含下列屬性
clientX,觸摸目標(biāo)在視口中的 x 坐標(biāo)。
clientY,觸摸目標(biāo)在視口中的 y 坐標(biāo)。
identifier,標(biāo)識(shí)觸摸的唯一 ID。
pageX,觸摸目標(biāo)在頁(yè)面中的 x 坐標(biāo)。
pageY,觸摸目標(biāo)在頁(yè)面中的 y 坐標(biāo)。
screenX,觸摸目標(biāo)在屏幕中的 x 坐標(biāo)。
screenY,觸摸目標(biāo)在屏幕中的 y 坐標(biāo)。
target,觸摸的 DOM 節(jié)點(diǎn)目標(biāo)。
手勢(shì)事件
gesturestart,當(dāng)一個(gè)手指已經(jīng)按在屏幕上而另一個(gè)手指又觸摸屏幕時(shí)觸發(fā)。
gesturechange,當(dāng)觸摸屏幕的任何一個(gè)手指的位置發(fā)生變化時(shí)觸發(fā)。
gestureend,當(dāng)任何一個(gè)手指從屏幕上面移開(kāi)時(shí)觸發(fā)。
內(nèi)存和性能 事件委托
對(duì)"事件處理程序過(guò)多"問(wèn)題的解決方案,就是事件委托。事件委托利用了事件冒泡,只指定一個(gè)事件處理程序,就可以管理某一類型的所有事件
var item1 = document.getElementById("goSomewhere"); var item2 = document.getElementById("doSomething"); var item3 = document.getElementById("sayHi"); EventUtil.addHandler(item1, "click", function(event){ location.; }); EventUtil.addHandler(item2, "click", function(event){ document.title = "I changed the document"s title"; }); EventUtil.addHandler(item3, "click", function(event){ alert("hi"); });模擬事件 DOM中的事件模擬
可以在document對(duì)象上使用createEvent()方法創(chuàng)建event對(duì)象,這個(gè)方法就是接收一個(gè)參數(shù),即表示要?jiǎng)?chuàng)建的事件類型的字符串
UIEvents,一般化的UI事件,鼠標(biāo)事件和鍵盤事件都繼承自UI事件,DOM3級(jí)中是UIEvent
MouseEvents,一般化的鼠標(biāo)事件,DOM3級(jí)中是MouseEvent
MutationEvents,一般化的DOM變動(dòng)事件,DOM3級(jí)中是MutationEvent
HTMLEvents,一般化的HTML事件,沒(méi)有對(duì)應(yīng)的DOM3級(jí)事件
模擬鼠標(biāo)事件
type(字符串),表示要觸發(fā)的事件類型,例如 "click" 。
bubbles(布爾值),表示事件是否應(yīng)該冒泡。為精確地模擬鼠標(biāo)事件,應(yīng)該把這個(gè)參數(shù)設(shè)置為true 。
cancelable(布爾值),表示事件是否可以取消。為精確地模擬鼠標(biāo)事件,應(yīng)該把這個(gè)參數(shù)設(shè)置為 true 。
view(AbstractView),與事件關(guān)聯(lián)的視圖。這個(gè)參數(shù)幾乎總是要設(shè)置為 document.defaultView 。
detail(整數(shù)),與事件有關(guān)的詳細(xì)信息。這個(gè)值一般只有事件處理程序使用,但通常都設(shè)置為 0 。
screenX(整數(shù)),事件相對(duì)于屏幕的 X 坐標(biāo)。
screenY(整數(shù)),事件相對(duì)于屏幕的 Y 坐標(biāo)。
clientX(整數(shù)),事件相對(duì)于視口的 X 坐標(biāo)。
clientY(整數(shù)),事件想對(duì)于視口的 Y 坐標(biāo)。
ctrlKey(布爾值),表示是否按下了 Ctrl 鍵。默認(rèn)值為 false 。
altKey(布爾值),表示是否按下了 Alt 鍵。默認(rèn)值為 false 。
shiftKey(布爾值),表示是否按下了 Shift 鍵。默認(rèn)值為 false 。
metaKey(布爾值),表示是否按下了 Meta 鍵。默認(rèn)值為 false 。
button(整數(shù)),表示按下了哪一個(gè)鼠標(biāo)鍵。默認(rèn)值為 0 。
relatedTarget(對(duì)象),表示與事件相關(guān)的對(duì)象。這個(gè)參數(shù)只在模擬 mouseover 或 mouseout時(shí)使用。
var btn = document.getElementById("myBtn"); //創(chuàng)建事件對(duì)象 var event = document.createEvent("MouseEvents"); //初始化事件對(duì)象 event.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null); //觸發(fā)事件 btn.dispatchEvent(event);
模擬鍵盤事件
type(字符串),表示要觸發(fā)的事件類型,如 "keydown" 。
bubbles(布爾值),表示事件是否應(yīng)該冒泡。為精確模擬鼠標(biāo)事件,應(yīng)該設(shè)置為 true 。
cancelable(布爾值),表示事件是否可以取消。為精確模擬鼠標(biāo)事件,應(yīng)該設(shè)置為 true 。
view(AbstractView) ,與事件關(guān)聯(lián)的視圖。這個(gè)參數(shù)幾乎總是要設(shè)置document.defaultView 。
key(布爾值),表示按下的鍵的鍵碼。
location(整數(shù)),表示按下了哪里的鍵。0 表示默認(rèn)的主鍵盤,1 表示左,2 表示右,3 表示數(shù)字鍵盤,4 表示移動(dòng)設(shè)備(即虛擬鍵盤),5 表示手柄。
modifiers(字符串),空格分隔的修改鍵列表,如 "Shift" 。
repeat(整數(shù)),在一行中按了這個(gè)鍵多少次。
var textbox = document.getElementById("myTextbox"), event; //以 DOM3 級(jí)方式創(chuàng)建事件對(duì)象 if (document.implementation.hasFeature("KeyboardEvents", "3.0")){ event = document.createEvent("KeyboardEvent"); //初始化事件對(duì)象 event.initKeyboardEvent("keydown", true, true, document.defaultView, "a", 0, "Shift", 0); } //觸發(fā)事件 textbox.dispatchEvent(event);
在Firefox中,調(diào)用createEvent()并傳入"KeyEvents"就可以創(chuàng)建一個(gè)鍵盤事件,返回的事件對(duì)象會(huì)包含一個(gè)initKeyEvent()方法,接收10個(gè)參數(shù)
type(字符串),表示要觸發(fā)的事件類型,如 "keydown" 。
bubbles(布爾值),表示事件是否應(yīng)該冒泡。為精確模擬鼠標(biāo)事件,應(yīng)該設(shè)置為 true 。
cancelable(布爾值),表示事件是否可以取消。為精確模擬鼠標(biāo)事件,應(yīng)該設(shè)置為 true 。
view(AbstractView) ,與事件關(guān)聯(lián)的視圖。這個(gè)參數(shù)幾乎總是要設(shè)置為 document.default-View 。
ctrlKey(布爾值),表示是否按下了 Ctrl 鍵。默認(rèn)值為 false 。
altKey(布爾值),表示是否按下了 Alt 鍵。默認(rèn)值為 false 。
shiftKey(布爾值),表示是否按下了 Shift 鍵。默認(rèn)值為 false 。
metaKey(布爾值),表示是否按下了 Meta 鍵。默認(rèn)值為 false 。
keyCode(整數(shù)),被按下或釋放的鍵的鍵碼。這個(gè)參數(shù)對(duì) keydown 和 keyup 事件有用,默認(rèn)值為 0 。
charCode(整數(shù)),通過(guò)按鍵生成的字符的 ASCII 編碼。這個(gè)參數(shù)對(duì) keypress 事件有用,默認(rèn)值為 0 。
//只適用于 Firefox var textbox = document.getElementById("myTextbox") // 創(chuàng)建事件對(duì)象 var event = document.createEvent("KeyEvents"); // 初始化事件對(duì)象 event.initKeyEvent("keypress", true, true, document.defaultView, false, false, false, false, 65, 65); //觸發(fā)事件 textbox.dispatchEvent(event);
要?jiǎng)?chuàng)建新的自定義事件,可以調(diào)用createEvent("CustomEvent"),接收4個(gè)參數(shù)
type(字符串),觸發(fā)的事件類型,例如 "keydown" 。
bubbles(布爾值),表示事件是否應(yīng)該冒泡。
cancelable(布爾值),表示事件是否可以取消。
detail(對(duì)象),任意值,保存在 event 對(duì)象的 detail 屬性中
var div = document.getElementById("myDiv"), event; EventUtil.addHandler(div, "myevent", function(event){ alert("DIV: " + event.detail); }); EventUtil.addHandler(document, "myevent", function(event){ alert("DOCUMENT: " + event.detail); }); if (document.implementation.hasFeature("CustomEvents", "3.0")){ event = document.createEvent("CustomEvent"); event.initCustomEvent("myevent", true, false, "Hello world!"); div.dispatchEvent(event); }IE中的事件模擬
模擬一個(gè)按鈕觸發(fā)click事件過(guò)程
var btn = document.getElementById("myBtn"); //創(chuàng)建事件對(duì)象 var event = document.createEventObject(); //初始化事件對(duì)象 event.screenX = 100; event.screenY = 0; event.clientX = 0; event.clientY = 0; event.ctrlKey = false; event.altKey = false; event.shiftKey = false; event.button = 0; //觸發(fā)事件 btn.fireEvent("onclick", event);
模擬keypress事件
var textbox = document.getElementById("myTextbox"); //創(chuàng)建事件對(duì)象 var event = document.createEventObject(); //初始化事件對(duì)象 event.altKey = false; event.ctrlKey = false; event.shiftKey = false; event.keyCode = 65; //觸發(fā)事件 textbox.fireEvent("onkeypress", event);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/97889.html
錯(cuò)誤處理與調(diào)試 錯(cuò)誤處理 try-catch語(yǔ)句 try{ //可能會(huì)導(dǎo)致錯(cuò)誤的代碼 }catch(error){ //在錯(cuò)誤發(fā)生時(shí)怎么處理 } 發(fā)生錯(cuò)誤時(shí)可以顯示瀏覽器給出的信息 try{ window.someNonexistentFunction(); }catch(error){ alert(error.message); } 在try-catch語(yǔ)句中是可選的,但...
摘要:腳本編程跨文檔消息傳遞跨文檔消息傳送,簡(jiǎn)稱為,指的是來(lái)自不同域的頁(yè)面間傳遞消息的核心是方法,在規(guī)范中,除了部分之外的其他部分也會(huì)提到這個(gè)方法名,但都是為了同一個(gè)目的,向另一個(gè)地方傳遞參數(shù)。第一個(gè)頁(yè)面加載時(shí)為空 HTML5腳本編程 跨文檔消息傳遞 跨文檔消息傳送,簡(jiǎn)稱為XMD,指的是來(lái)自不同域的頁(yè)面間傳遞消息 XMD的核心是postMessage()方法,在HTML5規(guī)范中,除了XDM...
摘要:簡(jiǎn)介簡(jiǎn)史誕生于年,當(dāng)時(shí)主要負(fù)責(zé)表單的輸入驗(yàn)證。實(shí)現(xiàn)一個(gè)完整的由三部分組成核心文檔對(duì)象模型瀏覽器對(duì)象模型就是對(duì)實(shí)現(xiàn)該標(biāo)準(zhǔn)規(guī)定的各個(gè)方面內(nèi)容的語(yǔ)言的描述。把整個(gè)頁(yè)面映射為一個(gè)多層節(jié)點(diǎn)結(jié)構(gòu)。由萬(wàn)維網(wǎng)聯(lián)盟規(guī)劃。主要目標(biāo)是映射文檔的結(jié)構(gòu)。 JavaScript簡(jiǎn)介 JavaScript簡(jiǎn)史 JavaScript誕生于1995年,當(dāng)時(shí)主要負(fù)責(zé)表單的輸入驗(yàn)證。 如果沒(méi)有表單驗(yàn)證的功能,填入信息之...
摘要:事件,當(dāng)文檔從可見(jiàn)變?yōu)椴豢梢?jiàn)或從不可見(jiàn)變?yōu)榭梢?jiàn)時(shí),觸發(fā)該事件要為兩個(gè)事件都指定事件處理程序?qū)ο蟀瑐€(gè)方法,接收個(gè)參數(shù)成功回調(diào)函數(shù)可選的失敗回調(diào)函數(shù)可選的選項(xiàng)對(duì)象。,事件已經(jīng)發(fā)生且執(zhí)行完所有事件處理程序的時(shí)間。 新興的API requestAnimationFrame() 早期動(dòng)畫循環(huán) 基本動(dòng)畫循環(huán) (function(){ function updateAnimations(){...
表單腳本 表單的基礎(chǔ)知識(shí) HTMLFormElement有自己獨(dú)特的屬性和方法 acceptCharset,服務(wù)器能夠處理的字符集,等價(jià)于HTML中的accept-charset特性 action,接受請(qǐng)求的URL,等價(jià)于HTML中的action特性 elements,表單中所有控件的集合 enctype,請(qǐng)求的編碼類型,等價(jià)于HTML中的enctype特性 length,表單中控件的數(shù)量 m...
閱讀 1288·2023-04-25 20:31
閱讀 3781·2021-10-14 09:42
閱讀 1563·2021-09-22 16:06
閱讀 2762·2021-09-10 10:50
閱讀 3627·2021-09-07 10:19
閱讀 1868·2019-08-30 15:53
閱讀 1243·2019-08-29 15:13
閱讀 2888·2019-08-29 13:20