1、什麼是事件? 事件分為兩部分: 1)、行為本身:瀏覽器天生就賦予其的行為 onclick 、onmouseover(onmouseenter)、onmouseout(onmouseleave)、onmousemove、onmousedown、onmouseup、onmousewheel(滑鼠滾輪 ...
1、什麼是事件?
事件分為兩部分:
1)、行為本身:瀏覽器天生就賦予其的行為 onclick 、onmouseover(onmouseenter)、onmouseout(onmouseleave)、onmousemove、onmousedown、onmouseup、onmousewheel(滑鼠滾輪滾動行為)、onscroll(滾動條滾動行為)、onresize(window.onresize瀏覽器視窗大小改變事件)、onload、onunload、onfocus(文本框獲取焦點行為)、onblur(文本框失去焦點行為)、onkeydown、onkeyup(鍵盤的按下和抬起行為)。沒有給上述的行為綁定方法,事件也是存在的,當我們點擊這個盒子的時候,同樣會觸發它的onclick行為,只是什麼都沒有做而已
2)、事件綁定:給元素的某一個行為綁定方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="div1"> </div> <script> var oDiv = document.getElementById('div1'); //DOM0級事件綁定 /* 我們是把匿名函數定義的部分當做一個值賦值給oDiv的點擊行為(函數表達式) 當我們觸發#div1的點擊行為,會執行對應綁定上的方法 重要:不僅僅把綁定的方法執行了,而且瀏覽器還預設的給這個方法傳遞了一個參數值->MouseEvent:滑鼠事件對象 1)、它是一個對象數據類型值,裡面包含了很多的屬性名和屬性值,這些都是用來記錄當前滑鼠的相關信息的 2)、MouseEvent-->UIEvent-->Event-->Object 3)、MouseEvent記錄的是頁面中唯一一個滑鼠每一次觸發時候得相關信息,和到底是在哪個元素上觸發的沒有關係 */ oDiv.onclick = function(){ //當我們觸發oDiv的click行為的時候,會把綁定的這個函數執行 //onclick這個行為定義在當前元素的私有屬性上 } //DOM2級事件綁定 oDiv.addEventListener('click',function(){ console.log("ok") },false) //addEventListener這個屬性是定義在當前元素所屬EventTarget這個類的原型上的 </script> </body> </html>
2、關於事件對象MouseEvent的相容問題
1)、事件對象本身的獲取存在相容問題:標準瀏覽器中是瀏覽器給方法傳遞的參數,我們只需要定義形參e就可以獲取到;在IE6-8中瀏覽器不會給方法傳遞參數,我們如果需要的話,我們需要到window.event中獲取查找
oDiv.onclick = function(e){ e = e || window.event; e.target = e.target || e.srcElement e.pageX = e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)) e.pageY = e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)) e.preventDefault()?e.preventDefault():e.returnValue = false e.clientX/e.clientY //當前滑鼠觸發點距離當前屏幕左上角的x/y軸的坐標值 e.type // 存儲的是當前滑鼠觸發的行為類型"click" e.target //事件源,當前滑鼠觸發的是哪個元素,那麼他存儲的就是哪個元素,但是在ie6-8中不存在這個屬性(e.target的值就是undefined),我們使用e.srcElement來獲取事件源 e.pageX/e.pageY://當前滑鼠觸發點距離body左上角(頁面第一屏幕最左上端)的x/y軸的坐標,但是在ie6-8中沒有這個屬性,我們通過使用clientY+滾動條捲去的高度來獲取也可以 e.preventDefault://阻止瀏覽器的預設行為,在ie6-8中沒有這個方法,我們需要使用e.returnValue = false; 或者使用return false;和上述代碼是一樣的效果 e.stopPropagation://阻止事件的冒泡傳播,在ie6-8中不相容,使用e.cancelBubble = true來代替 KeyboardEvent(鍵盤事件) e.keyCode://當前鍵盤每一個鍵對應的值 /* 預設行為: a標簽的預設行為就是跳轉頁面,但是有時候我們使用a標簽,只是想應用他的特殊性,並不想點擊的時候跳轉 */ }