第13章 事件css
1.事件流:描述從頁面中接收事件的順序。瀏覽器
三個階段:捕獲,處於目標,冒泡。ide
2.事件處理程序:局部變量event表示事件對象,this值爲事件目標元素。函數
(1)HTML事件處理程序:能夠訪問特性。弊端:可能調用事件處理程序時,函數還未定義。同時代碼緊密耦合,修改不便。性能
(2)DOM0級事件處理程序:this引用當前元素。弊端:一個元素只能添加一個事件處理程序。this
(3)DOM2級事件處理程序:addEventListener()和removeEventListener()。沒法移除匿名函數。IE9.0+支持該方法。spa
3.事件對象:在事件處理程序中傳入的event對象
this始終等於currentTarget,表示事件的註冊元素。target等於實際觸發的目標seo
阻止事件默認行爲:event.preventDefault(),前提:event.cancelable屬性爲true。事件
中止冒泡:event.stopPropagation()
肯定事件流階段:event.eventPhase
4.事件類型:
UI事件:load,當頁面徹底加載(全部圖像、js、css)後觸發。<img><script>標籤也能夠觸發。
unload,當文檔被徹底卸載後觸發。用來清除引用,避免內存泄漏。
resize,瀏覽器窗口被調整寬高度時觸發
scroll,在文檔滾動期間重複被觸發。
焦點事件:focus和blur(不冒泡),focusin和focusout(冒泡)
鼠標事件:click(只有它能夠經過鍵盤觸發),dbclick,mousedown,mouseup,mouseover,mousemove,mouseout
event座標位置屬性:clientX和clientY,pageX和pageY,screenX和screenY
event修改件屬性:shiftKey,ctrlKey,altKey,metaKey,相應鍵按下返回true
event相關元素屬性:relatedTarget,對於mouseover,mouseout事件指定相關元素。
event鼠標按鈕屬性:button
event更多事件屬性:detail,P375
滾輪事件:mousewheel
無障礙性問題:不要經過onmousedown代替onclick,由於屏幕閱讀器沒法觸發onmousedown
不要使用onmouseover向用戶展現新選項
不要使用dbclick執行重要操做。
鍵盤與文本事件:keydown,keypress,keyup,textInput
event鍵碼屬性:keyCode,charCode
複合事件:
變更事件:刪除節點,插入節點
HTML5事件:contextmenu事件,右鍵單擊出現上下文菜單時觸發。
beforeunload事件,頁面卸載前觸發。
DOMContentLoaded事件,跟load對比,造成DOM樹後就觸發,無論圖像,js,css
readystatechange事件,提供文檔或元素加載狀態信息
pageshow和pagehide事件
haschange事件
5.內存和性能:利用好事件處理程序,避免事件處理程序過多。
事件委託:利用事件冒泡,只指定一個事件處理程序,管理一類型的全部事件。利用event.target進行區分。
移除事件處理程序:在不須要時移除事件處理程序,(1)在綁定事件的標籤被替換或者刪除前,(2)在頁面卸載前,用onunload
6.模擬事件:用js模擬一個事件行爲的發送。
建立事件:createEvent()
初始化事件:initMouseEvent()鼠標事件,initKeyboardEvent()鍵盤事件
觸發事件:元素.dispatchEvent()
自定義事件:document.createEvent("CustomEvent").initCustomEvent("自定義事件名稱")