1. 事件對象javascript
Event 對象表明事件的狀態,好比事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。php
意思就是說,假如用戶單擊了一個元素,該元素擁有一個click事件,那麼一樣的事件也將會被它的祖先觸發,這個事件從該元素開始一直冒泡到DOM樹的最上層,這一過程稱爲事件冒泡 css
事件捕獲和事件是相反的,也就是說,當用戶觸發了一個事件的時候,這個事件是從DOM樹的最上層開始觸發一直到捕獲到事件源. html
因爲微軟和網景亂搞,後來必需要爲事件傳播機制,制定一個標準,由於事件捕獲是網景公司開發出來的,而事件冒泡是由微軟公司開發出來的,它們都想要本身的技術成爲標準,因此致使這兩個公司總是幹架,制定標準的人爲了避免讓它們幹架,因此研發了事件流. java
addEventListener
,假如你想要給某一個元素添加事件,如今就能夠這樣寫element.addEventListener(eventType, fn, false)
dom對象.addEventListener(事件類型, 回調函數, 事件機制)
這裏的事件類型表示你要使用哪一種事件類型好比click
, 回調函數裏面寫着觸發此事件你要作什麼事情, 事件機制分爲冒泡和捕獲,若是爲false
表示事件冒泡,爲true
表示事件捕獲兩虎之爭必有一傷
,可傷了咱們程序員了.這種不和諧的寫法是 dom對象.attachEvent(eventType, fn)
第一個參數表示事件類型,第二個是回調.這種寫法兼容IE, IE沒有實現事件捕獲,由於在當時他比較厲害,覺得不必…………只是,,,,省略一千字, 如今微軟的瀏覽器已經作得很好了… 只是調侃一下無其餘意圖..Code
1.// 註冊時間
2.if(dom.addEventListener) {
3. dom.addEventListener(eventType, fn);
4.} else {
5. if(dom.attachEvent) {
6. dom.attachEvent('on' + eventType, fn);
7. }
8.}
9.
10.// 下面是刪除事件
11.if(dom.removeEventListener) {
12. dom.removeEventListener(eventType, fn, false);
13.} else {
14. if(dom.detachEvent) {
15. dom.detachEvent("on" + eventType, fn)
16. }
17.}
1.<!DOCTYPE html>
2.<html>
3.<head>
4. <meta charset="utf-8">
5. <title>bubble event</title>
6. <style type="text/css">
7. body{margin:0;}
8. #one{
9. width:500px;
10. height:500px;
11. background:rgb(255,0,0);
12. border: 1px solid transparent;
13. }
14. #two{
15. width:400px;
16. height:400px;
17. margin: 0 auto;
18. margin-top: 50px;
19. background:rgb(255,50,50);
20. border: 1px solid transparent;
21. }
22. #three{
23. width:300px;
24. height:300px;
25. margin: 0 auto;
26. margin-top: 50px;
27. background:rgb(255,100,100);
28. border: 1px solid transparent;
29. }
30. #four{
31. width:200px;
32. height:200px;
33. margin: 0 auto;
34. margin-top: 50px;
35. background:rgb(255,150,150);
36. }
37. </style>
38.</head>
39.<body>
40. <div id='one'>
41. <div id='two'>
42. <div id='three'>
43. <div id='four'>
44. </div>
45. </div>
46. </div>
47. </div>
48.
49. <script>
50. var one = document.getElementById('one');
51. var two = document.getElementById('two');
52. var three = document.getElementById('three');
53. var four = document.getElementById('four');
54.
55. var useCapture = false; //false爲冒泡獲取【目標元素先觸發】 true爲捕獲獲取【父級元素先觸發】
56. one.addEventListener('click', function(event) {
57. event || (event = window.event);
58. console.log(event);
59. console.log('one');
60. }, useCapture);
61. two.addEventListener('click', function() {
62. console.log('two');
63. }, useCapture);
64. three.addEventListener('click', function() {
65. console.log('three');
66. }, useCapture);
67. four.addEventListener('click', function() {
68. console.log('four');
69. }, useCapture);
70.
71. /*
72. false
73. 冒泡
74. 點擊four div
75. 輸出結果:four three two one
76.
77. true
78. 捕獲
79. 點擊four div
80. 輸出結果: one two three four
81. */
82. </script>
83.</body>
84.</html>
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() |
再也不派發事件。 |
event || (event = window.event);
event.target||event.srcElement
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);
1.// 綁定事件.
2.function on(id, eventType, fn) {
3. var dom = this.isString(id) ? this.$id(id) : id;
4. if(dom.addEventListener) {
5. dom.addEventListener(eventType, fn);
6. } else {
7. if(dom.attachEvent) {
8. dom.attachEvent('on' + eventType, fn);
9. }
10. }
11.},
12.// 解除綁定
13.function un(id, eventType, fn) {
14. var dom = this.$id(id);
15. if(dom.removeEventListener) {
16. dom.removeEventListener(eventType, fn, false);
17. } else {
18. if(dom.detachEvent) {
19. dom.detachEvent("on" + eventType, fn)
20. }
21. }
22.
23.}
能用本身的力量站在這片大地上的人都是勇敢的人,而我想成爲這樣的人。