15_事件机制.html 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. .box1{
  9. width: 300px;
  10. height: 300px;
  11. background-color: red;
  12. }
  13. .box2{
  14. width: 200px;
  15. height: 200px;
  16. background-color: blue;
  17. }
  18. .box3{
  19. width: 100px;
  20. height: 100px;
  21. background-color: green;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <div class="box1">
  27. <div class="box2">
  28. <div class="box3"></div>
  29. </div>
  30. </div>
  31. <script>
  32. var box1 = document.querySelector(".box1");
  33. var box2 = document.querySelector(".box2");
  34. var box3 = document.querySelector(".box3")
  35. // 绑定事件
  36. box1.onclick = function(){
  37. console.log("box1");
  38. }
  39. box2.onclick = function(event){
  40. console.log("box2");
  41. // 阻止事件冒泡 stopPropagation()方法
  42. event.stopPropagation();
  43. }
  44. box3.onclick = function(event){
  45. console.log("box3");
  46. // 阻止事件冒泡 stopPropagation()方法
  47. // event.stopPropagation();
  48. }
  49. // 阻止事件默认行为
  50. var doc = document.documentElement;
  51. doc.oncontextmenu = function(event){
  52. // return false;
  53. // 阻止事件默认行为 preventDefault()方法
  54. event.preventDefault();
  55. console.log(event);
  56. }
  57. // 事件冒泡: 默认情况下事件触发从当前元素开始逐层向外依次触发
  58. // addEventListener 后面有三个参数 第一个事件名称 第二个事件处理函数 第三个参数是布尔值 如果为true 则事件捕获 否则事件冒泡
  59. // 事件冒泡: 事件从当前元素开始逐层向外依次触发
  60. // 事件捕获: 事件从当前元素开始逐层向内元素依次触发
  61. // addEventListener 可以为一个元素绑定多次事件
  62. // box1.addEventListener("click",function(){
  63. // console.log("box1");
  64. // },true)
  65. // box2.addEventListener("click",function(){
  66. // console.log("box2");
  67. // },true)
  68. // box3.addEventListener("click",function(){
  69. // console.log("box3");
  70. // },true)
  71. // box1.addEventListener("click",function(){
  72. // console.log("box1");
  73. // },false)
  74. // box2.addEventListener("click",function(){
  75. // console.log("box2");
  76. // },false)
  77. // box3.addEventListener("click",function(){
  78. // console.log("box3");
  79. // },false)
  80. // 当同时触发捕获和冒泡那么 先执行捕获再执行冒泡
  81. // 清除事件
  82. // 如果使用的是on 绑定的事件本质就是赋值操作只要将事件处理函数赋值为null 就可以清除事件了
  83. // box1.onclick = function(){
  84. // console.log("box1");
  85. // }
  86. // box1.onclick = null;
  87. // function foo(){
  88. // console.log("box1");
  89. // }
  90. // box1.addEventListener("click",foo)
  91. // 如果使用的是addEventListener 绑定的事件可以用removeEventListener 方法来清除事件的(注:removeEventListener 方法的参数必须和addEventListener内的参数一样)
  92. // box1.removeEventListener("click",foo)
  93. </script>
  94. </body>
  95. </html>