Js事件流概述,以及阻止事件冒泡、阻止默认行为

今天药忘吃喽~ 2023-10-02 21:03 114阅读 0赞

目录

一: 事件流概述

二:阻止事件冒泡

例子:原生js案例阻止事件冒泡

例子:Vue2中的阻止事件冒泡的写法

三:阻止默认行为

例子:原生js案例阻止事件默认行为

例子:Vue2中的阻止默认行为的写法


一: 事件流

事件发生时会在元素节点和根节点之间按照特定的顺序传播,路径所经过的所有结点都会收到该事件,这个传播过程即DOM事件流。

两种事件流模型:捕获型事件流、冒泡型事件流。

1)冒泡型事件流:事件的传播是从最特定的事件目标到最不特定的事件目标。即从DOM的叶子到根(从内到外),简单的理解(冒泡像潜泳吐泡泡),你品你细品,hhh~

2)捕获型事件流:事件的传播是从最不特定的事件目标到最特定的事件目标。即从DOM的根到叶子(从外到内),简单的理解(捕获像警察搜捕嫌疑人),你品你细品,hhh~

二:阻止事件冒泡

阻止冒泡:(在当前要阻止冒泡的事件函数中调用下面一种即可)

两种方式:① event.cancelBubble = true;

② event.stopPropagation();


例子:原生js案例阻止事件冒泡

案例解析:如果不阻止,点击内层div,内层div的事件执行完,会传播到外层div,执行外层div的事件,即冒泡型事件流

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>阻止事件冒泡</title>
  8. <style>
  9. #div1{
  10. width: 300px;
  11. height: 300px;
  12. border: 1px solid #000;
  13. background-color: red;
  14. border-radius: 50%;
  15. }
  16. #div2{
  17. width: 150px;
  18. height: 150px;
  19. border: 1px solid #000;
  20. margin: 75px auto;
  21. background-color: black;
  22. border-radius: 50%;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div id="div1">
  28. <div id="div2"></div>
  29. </div>
  30. <script>
  31. document.querySelector("#div1").onclick = function(){
  32. alert("触发了外层div")
  33. }
  34. document.querySelector("#div2").onclick = function(){
  35. alert("触发了内层div")
  36. // 阻止事件冒泡
  37. event.stopPropagation()
  38. }
  39. </script>
  40. </body>
  41. </html>

例子:Vue2中的阻止事件冒泡的写法

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>点击事件阻止事件冒泡</title>
  8. <script src="../vue.js"></script>
  9. <style>
  10. [v-cloak]{
  11. display: block;
  12. }
  13. .parent,.son,.sun{
  14. border: 1px solid #000;
  15. border-radius: 50%;
  16. }
  17. .parent{
  18. width: 300px;
  19. height: 300px;
  20. background-color: red;
  21. }
  22. .son{
  23. width: 200px;
  24. height: 200px;
  25. margin: 50px auto;
  26. background-color: aqua;
  27. }
  28. .sun{
  29. width: 100px;
  30. height: 100px;
  31. margin: 50px auto;
  32. background-color: black;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div id="app">
  38. <div class="parent" @click="alert1()">
  39. <div class="son" @click.stop="alert2()">
  40. <div class="sun" @click.stop="alert3()"></div>
  41. </div>
  42. </div>
  43. </div>
  44. <script>
  45. var app = new Vue({
  46. el: "#app",
  47. data: {
  48. },
  49. methods: {
  50. alert1:function(){
  51. alert("父亲")
  52. },
  53. alert2:function(){
  54. alert("儿子")
  55. },
  56. alert3:function(){
  57. alert("孙子")
  58. }
  59. },
  60. })
  61. </script>
  62. </body>
  63. </html>

三:阻止默认行为

阻止默认行为:(在当前要阻止默认行为的事件函数中调用下面一种即可)

三种方式:① return false

② event.preventDefault()

③ event.returnValue = false


例子:原生js案例阻止事件默认行为

案例解析:阻止之后,form表单中的提交地址,就不提交,不进行网页跳转啦!

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>preventDefault</title>
  8. </head>
  9. <body>
  10. <div>
  11. <form action="https://www.baidu.com" method="post">
  12. <button id="submitBtn">提交表单</button>
  13. </form>
  14. </div>
  15. <script>
  16. document.querySelector("#submitBtn").onclick = function(){
  17. console.log("点击了表单提交按钮!")
  18. // 阻止默认行为
  19. event.preventDefault()
  20. }
  21. </script>
  22. </body>
  23. </html>

例子:Vue2中的阻止默认行为的写法

案例解析:阻止了才可以进行打印哦!

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>提交表单阻止默认行为</title>
  8. <script src="../vue.js"></script>
  9. </head>
  10. <body>
  11. <div id="app">
  12. <form action="https://www.baidu.com" method="post">
  13. <button id="btn" type="submit" @click.prevent="f()">
  14. 点击提交
  15. </button>
  16. </form>
  17. </div>
  18. <script>
  19. var app = new Vue({
  20. el: "#app",
  21. data: {
  22. },
  23. methods: {
  24. f:function(){
  25. console.log("点击了表单提交按钮")
  26. // 阻止事件默认行为 或者 使用事件修饰符阻止
  27. // var ev = ev || event
  28. // ev.preventDefault()
  29. }
  30. },
  31. })
  32. </script>
  33. </body>
  34. </html>

发表评论

表情:
评论列表 (有 0 条评论,114人围观)

还没有评论,来说两句吧...

相关阅读