1.事件對象css
Event 對象表明事件的狀態,好比事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。
使用場景即:html
var oDIv = document.getElementById('box');
oDiv.onclick = function(event){
.........
}
2.事件流瀏覽器
2.1事件流發展史ruby
見:http://www.cnblogs.com/rubylouvre/archive/2010/04/27/1721988.htmldom
2.2冒泡(由下到上)函數
意思就是說,假如用戶單擊了一個元素,該元素擁有一個click事件,那麼一樣的事件也將會被它的祖先觸發,這個事件從該元素開始一直冒泡到DOM樹的最上層,這一過程稱爲事件冒泡
2.3捕獲(由上到下)spa
事件捕獲和事件冒泡是相反的,也就是說,當用戶觸發了一個事件的時候,這個事件是從DOM樹的最上層開始觸發一直到捕獲到事件源.
2.4事件流的寫法以及實現方式3d
addEventListener
,假如你想要給某一個元素添加事件,如今就能夠這樣寫element.addEventListener(eventType, fn, false)
dom對象.addEventListener(事件類型, 回調函數, 事件機制)
這裏的事件類型表示你要使用哪一種事件類型好比click
, 回調函數裏面寫着觸發此事件你要作什麼事情, 事件機制分爲冒泡和捕獲,若是爲false
表示事件冒泡,爲true
表示事件捕獲dom對象.attachEvent(eventType, fn)
第一個參數表示事件類型,第二個是回調.這種寫法兼容IE, IE沒有實現事件捕獲,3.關於event對象指針
target
來獲取到(IE暫且不談),或者想阻止瀏覽器的默認行爲能夠經過方法preventDefault()
來進行阻止.如下是event對象的一些屬性和方法屬性 | 描述 |
---|---|
altKey | 返回當事件被觸發時,」ALT」 是否被按下。 |
button | 返回當事件被觸發時,哪一個鼠標按鈕被點擊。 |
clientX | 返回當事件被觸發時,鼠標指針的水平座標。 |
clientY | 返回當事件被觸發時,鼠標指針的垂直座標。 |
ctrlKey | 返回當事件被觸發時,」CTRL」 鍵是否被按下。 |
metaKey | 返回當事件被觸發時,」meta」 鍵是否被按下。 |
relatedTarget | 返回與事件的目標節點相關的節點。 |
screenX | 返回當某個事件被觸發時,鼠標指針的水平座標。 |
screenY | 返回當某個事件被觸發時,鼠標指針的垂直座標。 |
shiftKey | 返回當事件被觸發時,」SHIFT」 鍵是否被按下。 |
IE
屬性(除了上面的鼠標/事件屬性,IE 瀏覽器還支持下面的屬性)屬性 | 描述 |
---|---|
cancelBubble |
若是事件句柄想阻止事件傳播到包容對象,必須把該屬性設爲 true。 |
fromElement | 對於 mouseover 和 mouseout 事件,fromElement 引用移出鼠標的元素。 |
keyCode | 對於 keypress 事件,該屬性聲明瞭被敲擊的鍵生成的 Unicode 字符碼。對於 keydown 和 keyup |
offsetX,offsetY | 發生事件的地點在事件源元素的座標系統中的 x 座標和 y 座標。 |
returnValue |
若是設置了該屬性,它的值比事件句柄的返回值優先級高。把這個屬性設置爲 |
srcElement |
對於生成事件的 Window 對象、Document 對象或 Element 對象的引用。 |
toElement | 對於 mouseover 和 mouseout 事件,該屬性引用移入鼠標的元素。 |
x,y | 事件發生的位置的 x 座標和 y 座標,它們相對於用CSS動態定位的最內層包容元素。 |
屬性和方法 | 描述 |
---|---|
bubbles | 返回布爾值,指示事件是不是起泡事件類型。 |
cancelable |
返回布爾值,指示事件是否可擁可取消的默認動做。 |
currentTarget |
返回其事件監聽器觸發該事件的元素。 |
eventPhase | 返回事件傳播的當前階段。 |
target |
返回觸發此事件的元素(事件的目標節點)。 |
timeStamp | 返回事件生成的日期和時間。 |
type |
返回當前 Event 對象表示的事件的名稱。 |
initEvent() | 初始化新建立的 Event 對象的屬性。 |
preventDefault() |
通知瀏覽器不要執行與事件關聯的默認動做。 |
stopPropagation() |
再也不派發事件。 |
4.Event對象的一些兼容寫法code
得到event對象兼容性寫法 event || (event = window.event); 得到target兼容型寫法 event.target||event.srcElement 阻止瀏覽器默認行爲兼容性寫法 event.preventDefault ? event.preventDefault() : (event.returnValue = false); 阻止冒泡寫法 event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);
事件綁定和取消事件綁定方法的形式
//事件綁定
function on(dom, eventType, fn) {
if(dom.addEventListener) {
dom.addEventListener(eventType, fn);
} else {
if(dom.attachEvent) {
dom.attachEvent('on' + eventType, fn);
}
}
//取消事件綁定
function un(dom, eventType, fn) {
if(dom.removeEventListener) {
dom.removeEventListener(eventType, fn, false);
} else {
if(dom.detachEvent) {
dom.detachEvent("on" + eventType, fn)
}
}
}
5.事件冒泡和事件捕獲demo
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>bubble event</title> <style type="text/css"> body{margin:0;} #one{ width:500px; height:500px; background:rgb(255,0,0); border: 1px solid transparent; } #two{ width:400px; height:400px; margin: 0 auto; margin-top: 50px; background:rgb(255,50,50); border: 1px solid transparent; } #three{ width:300px; height:300px; margin: 0 auto; margin-top: 50px; background:rgb(255,100,100); border: 1px solid transparent; } #four{ width:200px; height:200px; margin: 0 auto; margin-top: 50px; background:rgb(255,150,150); } </style> </head> <body> <div id='one'> <div id='two'> <div id='three'> <div id='four'> </div> </div> </div> </div> <script> var one = document.getElementById('one'); var two = document.getElementById('two'); var three = document.getElementById('three'); var four = document.getElementById('four'); var useCapture = false; //false爲冒泡獲取【目標元素先觸發】 true爲捕獲獲取【父級元素先觸發】 one.addEventListener('click', function(event) { event || (event = window.event); console.log(event); console.log('one'); }, useCapture); two.addEventListener('click', function() { console.log('two'); }, useCapture); three.addEventListener('click', function() { console.log('three'); }, useCapture); four.addEventListener('click', function() { console.log('four'); }, useCapture); /* false 冒泡 點擊four div 輸出結果:four three two one true 捕獲 點擊four div 輸出結果: one two three four */ </script> </body> </html>
參考資料:http://www.javashuo.com/article/p-tjszoppb-ck.html
做者:smile.轉角
QQ:493177502