当前位置:   article > 正文

vue3事件处理_vue3 window.evetn.stoppropagation()

vue3 window.evetn.stoppropagation()

1.事件的基本使用

使用v-on:xxx 或 @xxx 绑定事件,其中xxx是事件名;

  1. <template>
  2. <p>count的值为:{{count}}</p>
  3. <button v-on:click="addCount">count++</button>
  4. <button @click="count++">行内式的写法,点击按钮count++</button>
  5. </tempalte>
  6. <script setup>
  7. import {ref,reactive} from "vue"
  8. const count=ref(0);
  9. const addCount=()=>{
  10. count.value++;
  11. }
  12. </script>

2.事件对象

有时也需要在内联语句处理器中访问原始的 DOM 事件。可以用特殊变量 $event 把它传入方法

  1. <template>
  2. <div class="box" @contextmenu="sum($event,100,200)">
  3. <p>需求:右击当前盒子时计算传入数据的和,并阻止右击时弹出弹框的默认事件</p>
  4. </div>
  5. <!-- 事件处理程序中可以有多个方法,这些方法由逗号运算符分隔 -->
  6. <p><button @click="one($event),two($event)">传入多个方法</button> </p>
  7. </tempalte>
  8. <script setup>
  9. import {ref,reactive} from "vue"
  10. const sum=(e,a,b)=>{
  11. e.preventDefault();
  12. console.log(111)
  13. console.log(a+b);
  14. }
  15. const one=(e)=>{
  16. console.log(e);
  17. console.log("获取当前点击的位置:",e.clientX,e.clientY);
  18. }
  19. const two=(e)=>{
  20. console.log("我是第二个方法")
  21. }
  22. </script>

3.事件修饰符

在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。

为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。

Vue中的事件修饰符

  1. 1.prevent:阻止默认事件(常用);
  2. 2.stop:阻止事件冒泡(常用);
  3. 3.once:事件只触发一次(常用);
  4. 4.capture:使用事件的捕获模式;
  5. 5.self:只有event.target是当前操作的元素时才触发事件;
  6. 6.passive:事件的默认行为立即执行,无需等待事件回调执行完毕;
  1. <template>
  2. <div>
  3. <p>1.阻止默认事件</p>
  4. <a href="http://www.baiduc.com" @click.prevent="skip">百度一下,你就知道</a>
  5. </div>
  6. <div class="demo1" @click="showFather">
  7. <p>2.阻止冒泡</p>
  8. <div class="demo2" @click.stop="showSon"></div>
  9. </div>
  10. <p> 3.once事件只触发一次 <button @click="once">点击</button> </p>
  11. <div class="demo1" @click.capture="showFather">
  12. <p>4.capture使用事件的捕获模式</p>
  13. <div class="demo2" @click="showSon"></div>
  14. </div>
  15. <div class="demo1" @click.self="showFather">
  16. <p>4.self只有event.target是当前操作的元素时才触发事件</p>
  17. <div class="demo2" @click="showSon"></div>
  18. </div>
  19. <div>
  20. <p>5.passive:事件的默认行为立即执行,无需等待事件回调执行完毕;</p>
  21. <!-- 事件的默认行为立即执行,无需等待事件回调执行完毕; -->
  22. <ul @scroll.passive="demo" class="oul">
  23. <li>这是第1个li</li>
  24. <li>这是第2个li</li>
  25. <li>这是第3个li</li>
  26. <li>这是第4个li</li>
  27. <li>这是第5个li</li>
  28. </ul>
  29. </div>
  30. </tempalte>
  31. <script setup>
  32. import {ref,reactive} from "vue"
  33. const skip=()=>{
  34. console.log("阻止跳转!");
  35. }
  36. const showFather=()=>{
  37. console.log("showFather事件");
  38. }
  39. const showSon=()=>{
  40. console.log("showSon事件");
  41. }
  42. const once=function(){
  43. console.log("只触发一次的事件");
  44. }
  45. // @wheel滚轮滚动事件 @scroll滚动条滚动事件
  46. const demo=function(){
  47. for(let i=0;i<100000;i++){
  48. console.log("这是第"+i+"个");
  49. }
  50. console.log("111");
  51. }
  52. </script>

4.按键修饰符

在监听键盘事件时,我们经常需要检查特定的按键。Vue 允许为 v-on 或者 @ 在监听键盘事件时添加按键修饰符:

1.Vue中常用的按键别名:
  1. 回车 => enter
  2. 删除 => delete (捕获“删除”和“退格”键)
  3. 退出 => esc
  4. 空格 => space
  5. 换行 => tab (特殊,必须配合keydown去使用)
  6. => up
  7. => down
  8. => left
  9. => right
2.Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)
3.系统修饰键(用法特殊):tab、ctrl、alt、shift、meta

实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。

  1. (1).配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。
  2. (2).配合keydown使用:正常触发事件。

注意:在 Mac 系统键盘上,meta 对应 command 键 (⌘)。在 Windows 系统键盘 meta 对应 Windows 徽标键 (⊞)。在 Sun 操作系统键盘上,meta 对应实心宝石键 (◆)。在其他特定键盘上,尤其在 MIT 和 Lisp 机器的键盘、以及其后继产品,比如 Knight 键盘、space-cadet 键盘,meta 被标记为“META”。在 Symbolics 键盘上,meta 被标记为“META”或者“Meta”。

4.也可以使用keyCode去指定具体的按键(vue2有vue3已经舍去)
5.Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键别名
6. exact 修饰符:

.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。

  1. <tempalte>
  2. <p>
  3. <input type="text" @keydown.huiche="search" v-model="searchVal" />
  4. </p>
  5. <p>
  6. <!-- 同时按下ctrl+c 起作用-->
  7. <input type="text" placeholder="按下回车提示输入" @keyup.ctrl.c="showInfo($event)">
  8. </p>
  9. <!-- 有且只有 Ctrl 被按下的时候才触发 -->
  10. <!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
  11. <button @click.ctrl="onClick">A</button>
  12. <!-- 有且只有 Ctrl 被按下的时候才触发 -->
  13. <button @click.ctrl.exact="onClick">A</button>
  14. <!-- 没有任何系统修饰符被按下的时候才触发 -->
  15. <button @click.exact="onClick">A</button>
  16. </template>
  17. <script setup>
  18. const searchVal=ref("");
  19. //按下enter键,搜索
  20. const search=function(){
  21. window.open(`https://www.baidu.com/s?wd=${searchVal.value}`,"_blank");
  22. }
  23. const showInfo=function(e){
  24. console.log(e.keyCode);
  25. }
  26. const onClick=function(){
  27. console.log("只按下ctrl")
  28. }
  29. </script>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/79348
推荐阅读
相关标签
  

闽ICP备14008679号