1. 程式人生 > >關於javascript事件總結和自己的心得體會

關於javascript事件總結和自己的心得體會

傳統事件

1、表單事件

Form元素:submitreset

按鈕類表單元素:click

輸入、選擇框等元素:change

更換焦點:focusblur,這兩個事件不會冒泡,focusinfocusout可以冒泡

文字輸入表單:input事件,在每次更改文字的時候都會觸發;

2、window事件

這個事件的發生與瀏覽器視窗本身,而非視窗中顯示的任何特定文件內容有關

Load事件:完全載入的時候觸發,DOMContentLoadreadystatechangeload事件的代替;單個元素也可以使用,例如img

Unload事件:當用戶離開當前文件,專項其他文件的時候會觸發,不能取消使用者狀態,另外還有

beforeunloaded事件,可以詢問使用者是否確定離開當前頁面的機會

Onerror屬性:當js出錯的時候會觸發。但是他不是真正的事件處理程式。14.6

Abort事件:當網路資源因為使用者停止載入程序而導致失敗就會觸發他。

Focusblur:當瀏覽器視窗從作業系統中得到或者失去焦點的時候會觸發

Resize:當用戶調整視窗大小

Scroll:當用戶滾動,任何overflow設定為wrap的都可以觸發

3、滑鼠事件

滑鼠事件是可以冒泡的。clientXclientY屬性指定了滑鼠在視窗座標的位置,buttonwhich屬性制定了按下的滑鼠鍵是哪一個,當鍵盤的輔助件按下的時候,對應的屬性

altkeyctrlkeymetakeyshiftkey會設定成true;對於click事件detail屬性制定了其實單擊,雙擊,還是三擊。

Mousemove:移動或者拖動滑鼠

Mousedownmouseup事件:當這兩個事件加入時間佇列之後,還會觸發click事件

Clickdblckick

Mouseovermouseout:滑鼠懸停和移出事件;對於這兩個事件有一個relatedTarget屬性制定了這個過程涉及到的其他元素,這兩個事件冒泡,為了防止冒泡,還提供了兩個不冒泡的事件mouseentermouseleave

MousewheelDOMmouseScroll):滑鼠滑輪滾動,傳遞事件物件屬性指定滾輪的大小和方向

4、鍵盤事件

無論任何元素觸發鍵盤事件,傳遞給鍵盤事件的處理程式的事件物件有keycode欄位,他指定按下或者釋放的鍵是哪個。還有altkeyctrlkeymetakeyshiftkey

Keydownkeyup:在兩個事件之間會產生一個keypress事件,當按下鍵重複產生字元的時候,在keyup之前可能會產生多個keypress事件,他指向產生的字元而非是按下的鍵

5DOM事件:

推出新的不冒泡事件:focusinfocusoutmouseentermouseleave

Mousewheel

Textinput事件,傳遞給其的事件物件不再有難以使用的數字keycode屬性,而是由指定輸入文字字串的data屬性,他也不是鍵盤的特定事件,無論是鍵盤、剪下、貼上等任何方式都可以觸發,傳遞物件中有inputmethod屬性和一組代表著文字輸入種類的常量

傳遞新的keyboardEvent物件作為引數給keydownkeyupkeypress的事件處理程式來給文字輸入事件提供更好的支援

Wheel事件除了接受普通的滑鼠事件屬性還有deltaXdeltaYdeltaZ屬性來報告三個不同的滑鼠滾軸,

6HTML5事件:

Audiovideo元素

Html5的拖放API允許javascript應用參與基於作業系統的拖放操作實現web和原生應用間的資料傳輸。

Dragstart drag  dragend dragenter dragover dragleave drop

其附加屬性dataTransfer有一個datatransfer物件,他包含了關於傳輸的資料和其中可用的格式的資訊。

Html5定義了歷史管理機制,hashchangepopstate

Html5表達驗證機制,包括驗證失敗的時候會觸發invalid時間。

Html5對離線web應用的支援;offlineonline事件,無論何時瀏覽器失去或者得到網路連線都會在window物件觸發他們,標準還定義了大量其他的時間來通知應用下載進度和應用快取更新

Message事件,在接受每一個訊息的時候都會觸發;

Html5還定義了一些不在視窗、文件和文件元素的物件上觸發的事件。

7、觸控式螢幕和移動裝置事件

Orientationchange事件:旋轉這些裝置的時候產生的事件

Gesturestartgestureend事件:用於兩個手指的縮放和旋轉手勢,開始的時候產生start,結束的時候為end,這兩個事件之間的是跟蹤手勢的過程叫做gesturechange事件佇列,這些事件傳遞的事件物件屬性scaleratationscale屬性是兩個手指之間當前距離和初始距離的比值,ratation屬性是指從時間開始手指旋轉的角度,以度為單位,正值表示正是真旋轉,負值表示逆時針旋轉。

Touchstart:當手指觸控到螢幕的時候胡觸發的事件

Touchmove事件:當手指移動的時候會處罰touchmove事件,而當手指離開螢幕的時候會觸發touchend事件。觸控事件不像是滑鼠事件,觸控事件並不直接告訴觸控的座標,相反,觸控事件傳遞的座標,相反觸控事件傳遞的事件物件有一個changedTouches屬性,該屬性是一個類陣列物件,其每個元素都有描述觸控的位置;

8、註冊事件的處理程式

Ie8之前為addEventListener(),而ie9支援的版本是attachEvent()不同方法

(1)addEventListener()的方法;有三個引數,第一個是要註冊的事件的名稱,但是不應該包括用於設定事件處理程式的on字首;第二個引數指的是呼叫函式;最後一個為boolean數值,預設為false,如果為true,函式將會被註冊為捕獲事件處理程式;ie5以後的版本為attachEventdetachEvent

(2)關於事件的取消,在屬性上註冊事件直接返回false就可以取消事件,但是在addEventListener函式中,我們要呼叫event.preventDefault();方法取消事件的預設操作;在attachEvent中將returnValue屬性值設定為false

(3)下面講一下阻止冒泡的方法在支援addEventListener方法的瀏覽器中使用event.stopPropagation();取消事件傳播,另外還有取消後面註冊的多個註冊函式的方法為stopImmediatePropagation()方法;在不支援addEventListener的函式中將cancelBubble設定為一個true

(4)關於addEventListenerattachEvent這兩個方法的處理函式中this代表的物件,前者是呼叫的元素,後者代表的是window

(5)關於其作用域,正常情況下跟js一樣使用的是詞法作用域的規則,其作用域就是定義作用域,但是唯一有區別的就是在html屬性上定義的函式,因為在解析的過程中並不是直接執行的,而是轉換成了函式執行,在轉換成函式的時候使用with函式擴大了作用域,將其資料都轉變了全域性變數,作用域也提升到了全域性。