第3集丨Vue 江湖 —— Vue中的事件

news2024/9/22 11:40:36

目录

  • 一、Vue中事件使用
  • 二、事件修饰符
    • 2.1 prevent
    • 2.2 stop
    • 2.3 once
    • 2.4 capture
    • 2.5 self
    • 2.6 passive
    • 2.7 修饰符连续写
    • 2.8 整合案例
  • 三、键盘事件
    • 3.1 Vue 中常用的按键别名
    • 3.2 key值绑定
    • 3.3 系统修饰符键
    • 3.4 keyCode绑定
    • 3.5 自定义别名
    • 3.6 组合键
    • 3.7 案例整合

一、Vue中事件使用

事件的基本使用

  1. 使用 v-on:xxx@xxx 绑定事件,其中xxx是事件名
  2. 事件的回调需要配置在methods对象中,最终会在vm实例上,不会做数据代理。不要放在data中,否则也会为所增加的方法进行数据代理,设置settergetter
  3. methods中配置的函数,不要用箭头函数,否则this就是不是vm了。
  4. methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或 组件实例对象
  5. @click="demo"@click="demo($event)" 效果一致,但后者可以传参。

注意点

  1. event.target:得到事件发生的目标
  2. event.target.innerText:得到目标的文本内容

案例

<div id="root">
    <button v-on:click="show1">点击我(无参)</button>
    <button @click="show2($event,66)">点击我2(有参)</button>
</div>
<script>
    const vm = new Vue({
        el:'#root',
        data() {
            return {
                name: 'Vue',
            };
        },
        methods:{
            show1(event) {
                // 得到事件发生的目标
                console.log(event.target);
                // 点击我
                console.log(event.target.innerText);
                // true
                console.log(vm === this);
                alert("show1") 
            },
            show2(e,id) {
                console.log(e);
                alert("show2:"+id) 
            }
        }
    })
  </script>

二、事件修饰符

Vue.jsv-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault()event.stopPropagation()Vue.js 通过由点 . 表示的指令后缀来调用修饰符。

Vue中的事件修饰符:

  1. prevent:阻止默认事件(常用)
  2. stop:阻止事件冒泡(常用)
  3. once:事件只触发一次(常用)
  4. capture:使用事件的捕获模式。事件的处理机制是先捕获,再冒泡。从冒泡阶段开始触发事件,如果想要在捕获阶段就开始处理事件,用此修饰符
  5. self:只有event.target是当前操作的元素时才触发事件
  6. passive:事件的默认行为立即执行,无需等待事件回调执行完毕.

2.1 prevent

阻止默认事件:event.preventDefault(),使用方式:@click.prevent

<!-- 阻止默认事件 -->
<a @click.prevent="show($event,66)" href="https://blog.csdn.net/DUQGQG">阻止默认事件(prevent)</a>

<script>
  const vm = new Vue({
      el:'#root',
      data() {
          return {
              name: 'Vue',
          };
      },
      methods:{
          show(e,id) {
              // 阻止事件的默认行为
              // e.preventDefault();
              // 阻止事件冒泡
              // e.stopPropagation();
              console.log(e.target)
              alert("show2:"+id) 
          }
      }
  })
</script>

2.2 stop

停止事件冒泡 :event.stopPropagation()

下面案例中,点击按钮会事件冒泡到div上,加上stop修饰符之后就会阻止。

<!-- 阻止事件冒泡:点击按钮会冒泡到div上,加上stop修饰符 -->
<div class="div" @click="show($event,66)">
    <button @click.stop="show($event,66)">2. 阻止事件冒泡(stop)</button>
</div>
<script>
  const vm = new Vue({
      el:'#root',
      data() {
          return {
              name: 'Vue',
          };
      },
      methods:{
          show(e,id) {
              alert("show2:"+id) 
          }
      }
  })
</script>

2.3 once

下边按钮,点击事件只会触发一次。

<!-- 事件只触发一次 -->
<button @click.once="show($event,66)">3. 事件只触发一次(once)</button>

2.4 capture

使用事件的捕获模式。事件的处理机制是先捕获,再冒泡,然后从冒泡阶段开始触发事件。如果想要在捕获阶段就开始处理事件,用此修饰符。

<!-- 使用事件的捕获模式 -->
<div class="div" @click.capture="show2(1)">
    div1
    <div class="div2" @click="show2(2)">div2</div>
</div>

<script>
  const vm = new Vue({
      el:'#root',
      data() {
          return {
              name: 'Vue',
          };
      },
      methods:{
          show2(msg) {
              console.log(msg);
          }
      }
  })
</script>

在这里插入图片描述

2.5 self

只有event.target是当前操作的元素时才触发事件。

下面案例中,点击按钮时候,只会触发按钮的事件,到div上时,由于增加了self修饰符,不会触发div的点击事件。

<!-- 只有event.target是当前操作的元素时才触发事件 -->
<div class="div" @click.self="show($event,66)">
    <button @click="show($event,66)">5. 当前操作的元素时触发事件(self)</button>
</div>
<script>
  const vm = new Vue({
      el:'#root',
      data() {
          return {
              name: 'Vue',
          };
      },
      methods:{
          show(e,id) {
              // 阻止事件的默认行为
              // e.preventDefault();
              // 阻止事件冒泡
              // e.stopPropagation();
              console.log(e.target)
              alert("show2:"+id) 
          }
      }
  })
</script>

2.6 passive

事件的默认行为立即执行,无需等待事件回调执行完毕。

  1. scroll滚动事件:鼠标滚轮滚动、及键盘上下键滚动都会触发该事件。滚动到滚动条最底部,继续滚动不会触发该事件。

  2. wheel鼠标滚轮滚动事件:滚动一次触发一次。即使到滚动条最底部,继续滚动依然会触发。
    ● 触发顺序:首先触发滚轮事件函数,然后再执行浏览器行为将滚动条往下走。
    ● 该事件如果不加passive修饰符,会发现浏览器很卡顿,加上之后就好多了,底下例子说明了这一点。

<!-- 事件的默认行为立即执行,无需等待事件回调执行完毕 -->
<ul @scroll="show3">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
</ul>

<ul @wheel.passive="show3">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
</ul>

<script>
  const vm = new Vue({
      el:'#root',
      data() {
          return {
              name: 'Vue',
          };
      },
      methods:{
          show3(e) {
              // scroll滚动事件:鼠标滚轮滚动,键盘上下键滚动.到滚动条最底部,继续滚动不会触发
              // wheel鼠标滚轮滚动事件,滚动一次触发一次,即使到滚动条最底部,继续滚动依然会触发
              //  首先触发滚轮事件函数,然后再将滚动条往下走
              // console.log("s");
              for (let index = 0; index < 10000; index++) {
                  console.log("s");
              }
              console.log("任务结束!");
          }
      }
  })
</script>

2.7 修饰符连续写

修饰符可以连续写,例如:阻止事件冒泡和默认行为

<!-- 修饰符可以连续写:阻止事件冒泡和默认行为 -->
<div class="div" @click="show($event,66)">
	<a href="https://blog.csdn.net/DUQGQG" @click.stop.prevent="show($event,66)">2. 阻止事件冒泡和默认行为(@click.stop.prevent)</a>
</div>

2.8 整合案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../lib/vue.js"></script>
    <style>
        *{margin: 10px 0px;padding: 4px;}
        .div {
           height: 80px;
           background-color: #ccc; 
        }
        .div2 {
            background-color: orange;
        }
        ul{
            width: 200px;
            height: 200px;
            background-color: skyblue;
            overflow: auto;
        }
        li {
            height: 100px;
        }
    </style>
</head>
<body>
    <div id="root">
        <!-- 阻止默认事件 -->
        <a @click.prevent="show($event,66)" href="https://blog.csdn.net/DUQGQG">阻止默认事件(prevent)</a>
        <!-- 阻止事件冒泡:点击按钮会冒泡到div上,加上stop修饰符 -->
        <div class="div" @click="show($event,66)">
            <button @click.stop="show($event,66)">2. 阻止事件冒泡(stop)</button>
        </div>

        <!-- 事件只触发一次 -->
        <button @click.once="show($event,66)">3. 事件只触发一次(once)</button>

        <!-- 使用事件的捕获模式 -->
        <div class="div" @click.capture="show2(1)">
            div1
            <div class="div2" @click="show2(2)">div2</div>
        </div>

        <!-- 只有event.target是当前操作的元素时才触发事件 -->
        <div class="div" @click.self="show($event,66)">
            <button @click="show($event,66)">5. 当前操作的元素时触发事件(self)</button>
        </div>

        <!-- 事件的默认行为立即执行,无需等待事件回调执行完毕 -->
        <ul @scroll="show3">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>

        <ul @wheel.passive="show3">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
    </div>
    <script>
        const vm = new Vue({
            el:'#root',
            data() {
                return {
                    name: 'Vue',
                };
            },
            methods:{
                show(e,id) {
                    // 阻止事件的默认行为
                    // e.preventDefault();
                    // 阻止事件冒泡
                    // e.stopPropagation();
                    console.log(e.target)
                    alert("show2:"+id) 
                },
                show2(msg) {
                    console.log(msg);
                },
                show3(e) {
                    // scroll滚动事件:鼠标滚轮滚动,键盘上下键滚动.到滚动条最底部,继续滚动不会触发
                    // wheel鼠标滚轮滚动事件,滚动一次触发一次,即使到滚动条最底部,继续滚动依然会触发
                    //  首先触发滚轮事件函数,然后再将滚动条往下走
                    // console.log("s");
                    for (let index = 0; index < 10000; index++) {
                        console.log("s");
                    }
                    console.log("任务结束!");
                }
            }
        })
    </script>
</body>
</html>

在这里插入图片描述

三、键盘事件

键盘事件有:keydownkeyup,一般使用keyup事件。

键盘上每一个键都有自己的名字和键值,即:keykeyCode。例如回车键的key="Enter" , keyCode=13

3.1 Vue 中常用的按键别名

  1. 回车:enter
  2. 删除:delete(捕获删除和退格键)
  3. 退出:esc
  4. 空格:space
  5. 换行:tab(特殊,必须配合keydown去使用,因为tab默认将光标从当前元素焦点切走)
  6. 上:up
  7. 下:down
  8. 左:left
  9. 右:right

使用方式@keyup.enter

<div id="root">
	<input type="text" placeholder="按下回车提示输入" @keyup.enter="show">
 </div>
 <script>
     const vm = new Vue({
         el:"#root",
         data() {
             return {
                 name: 'Vue',
             };
         },
         methods:{
             show(e){
                 // if (e.keyCode!=13) return; 
                 // console.log(e.target.value);
                 console.log(e.key, e.keyCode);
             }
         }
     })
 </script>

3.2 key值绑定

Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名),例如:CapsLock--> caps-lock

<input type="text" placeholder="CapsLock" @keyup.caps-lock="show">

3.3 系统修饰符键

系统修饰符键用法特殊:ctrlaltshiftmeta(指的是win键)

● 1)配合keyup使用:按下修饰符键的同时,再按下其他键,随后释放其他键,事件才被触发。例如:按下ctrl+y,再释放y才能触发事件
● 2)配合keydown使用:正常触发事件。

<!-- 正常触发 -->
<input type="text" placeholder="keydown.ctrl" @keydown.ctrl="show">
<!-- 修饰符键的同时,再按下其他键,随后释放其他键,事件才被触发 -->
<input type="text" placeholder="keyup.ctrl" @keyup.ctrl="show">

3.4 keyCode绑定

也可以使用keyCode去指定具体的按键(不推荐),例如:@keyup.13="show"
keyCode参考文档

<input type="text" placeholder="@keyup.13" @keyup.13="show"><br>

3.5 自定义别名

Vue.config.keyCodes.自定义建名 = 建码,可以去定制按键别名,例如:Vue.config.keyCodes.huiche = 13

<input type="text" placeholder="@keyup.huiche" @keyup.huiche="show">
<script>
	// 定义了一个别名按键
	Vue.config.keyCodes.huiche = 13 
</script>

3.6 组合键

如何想按下ctrl+y触发,可以使用@keyup.ctrl.y

<!-- 按下ctrl+y触发 -->
<input type="text" placeholder="keyup.ctrl.y" @keyup.ctrl.y="show">

3.7 案例整合

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../lib/vue.js"></script>
</head>
<body>
    <div id="root">
        <input type="text" placeholder="按下回车提示输入" @keyup.enter="show"><br>
        <input type="text" placeholder="@keyup.13" @keyup.13="show"><br>
        <input type="text" placeholder="@keyup.huiche" @keyup.huiche="show"><br>
        <input type="text" placeholder="CapsLock" @keyup.caps-lock="show"><br>

        
        <input type="text" placeholder="tab" @keydown.tab="show"><br>
        <!-- 正常触发 -->
        <input type="text" placeholder="keydown.ctrl" @keydown.ctrl="show"><br>
        <!-- 修饰符键的同时,再按下其他键,随后释放其他键,事件才被触发 -->
        <input type="text" placeholder="keyup.ctrl" @keyup.ctrl="show"><br>
        <!-- 按下ctrl+y触发 -->
        <input type="text" placeholder="keyup.ctrl.y" @keyup.ctrl.y="show"><br>
    </div>
    <script>
        // 定义了一个别名按键
        Vue.config.keyCodes.huiche = 13 
        const vm = new Vue({
            el:"#root",
            data() {
                return {
                    name: 'Vue',
                };
            },
            methods:{
                show(e){
                    // if (e.keyCode!=13) return; 
                    // console.log(e.target.value);
                    console.log(e.key, e.keyCode);
                }
            }
        })
    </script>
</body>
</html>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/834699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s概念-pv和pvc

回到目录 kubernetes存储卷的分类太丰富了,每种类型都要写相应的接口与参数才行&#xff0c;这就让维护与管理难度加大。 persistenvolume(PV) 是配置好的一段存储(可以是任意类型的存储卷) 也就是说将网络存储共享出来,配置定义成PV。 PersistentVolumeClaim(PVC)是用户pod使…

实例030 窗口颜色的渐变

实例说明 在程序设计时&#xff0c;可以通过设置窗体的BackColor属性来改变窗口的背景颜色。但是这个属性改变后整个窗体的客户区都会变成这种颜色&#xff0c;并且非常单调。如果窗体的客户区可以向标题栏一样能够体现颜色的渐变效果&#xff0c;那么窗体风格将会另有一番风味…

【前端实习生备战秋招】—HTML 和 CSS面试题总结(二)

【前端实习生备战秋招】—HTML 和 CSS面试题总结&#xff08;二&#xff09; 1.有哪些方式可以对一个 DOM 设置它的 CSS 样式&#xff1f; 外部样式表&#xff0c;引入一个外部 css 文件内部样式表&#xff0c;将 css 代码放在 <head> 标签内部内联样式&#xff0c;将 c…

2023年电赛E题报告模板(K210版)--可直接使用

任务 图1 任务内容 要求 图2 基本要求内容 图3 发挥部分内容 说明 图4 说明内容 评分标准 图5 评分内容 正文 &#xff08;部分&#xff09; 摘要 本文使用K210芯片设计了一个运动目标控制与自动追踪系统。系统包括使用深度学习进行识别激光位置&#xff0c;其中红色激…

Vue2:基础入门

Vue2&#xff1a;基础入门1 Date: April 10, 2023 Sum: vue简介、vue的基本使用、vue的指令、修饰符、过滤器&#xff08;废&#xff09;、小黑的书架、记事本 Tags: * 目标&#xff1a; 能够知道 vue 的基本使用步骤 掌握插值表达式和 v-bind 指令的用法 能够掌握如何使用…

以太网接口指示灯状态分析和电路设计

一、RJ45以太网连接器介绍 以带网络隔离变压器的RJ45接头为例&#xff0c;如HR911105A&#xff0c;其技术参数如下 原理框图 指示灯部分 二、PHY芯片 phy芯片以DP83848CVV/NOPB为例&#xff0c;查看数据手册。引脚26&#xff0c;引脚27和引脚28和LED灯相关&#xff0c;如下截…

DataGrip实时模板的配置

DataGrip实时模板的配置 File→Setting→Editor→Live Templates→点击“”→Live Template 即可新写入一条模板语句 写入新模板 缩写&#xff1a;seld select $END$ from dual; 注意:一开始都是默认无应用的&#xff0c;需要手动配置应用于所有SQL 点击difine&#xff08;…

从零开始 Spring Cloud 9:RabbitMQ

从零开始 Spring Cloud 9&#xff1a;RabbitMQ 图源&#xff1a;laiketui.com RabbitMQ 是一款消息队列中间件&#xff0c;可以用于异步通信。 基础 安装 通过 Docker 安装镜像&#xff1a; docker pull rabbitmq:3-management运行 docker run \-e RABBITMQ_DEFAULT_USER…

微信小程序:点击按钮实现数据加载(带模糊查询)

效果图 代码 wxml: <!-- 搜索框--> <form action"" bindsubmit"search_all_productiond"><view class"search_position"><view class"search"><view class"search_left">工单号:</view…

力扣 416. 分割等和子集

题目来源&#xff1a;https://leetcode.cn/problems/partition-equal-subset-sum/description/ C题解&#xff08;思路来源代码随想录&#xff09; &#xff1a; 背包问题有多种背包方式&#xff0c;常见的有&#xff1a;01背包、完全背包、多重背包、分组背包和混合背包等等。…

实验笔记之——Android项目的适配

android有一个很烦人的点就是版本之间差距较大&#xff0c;且不兼容&#xff0c;导致不同版本之间代码兼容很容易出问题&#xff0c;一个常见的例子就是几年前自己开发的app&#xff0c;几年后再用竟然配置不了。。。为此&#xff0c;写下本博客记录一下配置旧项目的过程。 …

IDA+Frida分析CTF样本和Frid源码和objection模块

文章目录 一些资料IDA调试命令IDA调试安卓的10个技巧objection基本使用 Wallbreaker1frida源码阅读之frida-java 第一个实例EasyJNI第二个实例objection资料 art_trace2.pyart_trace2.js IDAFrida分析CTF样本和Frid源码和objection模块 一些资料 IDA调试命令 adb devices adb…

Redis 如何解决缓存雪崩、缓存击穿、缓存穿透难题

前言 Redis 作为一门热门的缓存技术&#xff0c;引入了缓存层&#xff0c;就会有缓存异常的三个问题&#xff0c;分别是缓存击穿、缓存穿透、缓存雪崩。我们用本篇文章来讲解下如何解决&#xff01; 缓存击穿 缓存击穿: 指的是缓存中的某个热点数据过期了&#xff0c;但是此…

我们一起聊聊Docker And Dockerfile

目录 一、前言 二、了解Dockerfile 三、Dockerfile 指令 四、多阶段构建 五、Dockerfile 高级用法 六、小结 一、前言 对于开发人员来说&#xff0c;会Docker而不知道Dockerfile等于不会Docker&#xff0c;上一篇文章带大家学习了Docker的基本使用方法&#xff1a;《一文…

Mybatis where 1=1 会导致索引失效?

背景 这几天在网上百度看到有说法 where 11 会导致索引失效 实践 1.直接where 条件 这是我自己本地建立的表&#xff0c;索引也看到了&#xff0c;是这个index_shopname 2.where 11 and 条件 这个是加了11的&#xff0c;可以看到也是走了索引的 3.直接select * from whe…

测试平台——用户模块开发

这里写目录标题 一、创建子应用二、用户注册设计1、用户注册模型类设计a、Django认证系统提供了用户模型类User&#xff0c;为什么还要定义User模型类?b、AbstractUserc、自定义用户模型类的字段有d、User模型类编写好了就可以了吗? 2、用户注册序列化器类设计a、注意b、单字…

基于分级安全的OpenHarmony架构设计

本文转载自 OpenHarmony TSC 官方微信公众号《峰会回顾第1期 | 基于分级安全的OpenHarmony架构设计》 演讲嘉宾 | 付天福 回顾整理 | 廖 涛 排版校对 | 李萍萍 嘉宾简介 付天福&#xff0c;OpenHarmony技术指导委员会安全及机密计算TSG负责人&#xff0c;华为公司科学家委员会…

机器人“瓦力”近在咫尺?谷歌最新的RT-2 AI模型简介

“首创”的机器人 AI 模型能够识别垃圾并执行复杂的动作。 上周五&#xff0c;谷歌 DeepMind 宣布了机器人变形器 2&#xff08;RT-2&#xff09;&#xff0c;这是一种“首次推出”的视觉-语言-行动&#xff08;VLA&#xff09;模型&#xff0c;利用从互联网上抓取的数据&…

理解 CSS 中的 Containing Block

前言 在开始本文之前先来看一个例子&#xff0c;下面一段简单的 html 代码&#xff0c;布局很简单&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"w…

clickhouse调研报告2

由Distributed表发送分片数据 clickhouse分区目录合并 clickhouse副本协同流程 clickhouse索引查询逻辑 clickhouse一级索引生成逻辑(两主键) clickhouse的data目录下包含如下目录: [root@brfs-stress-01 201403_10_10_0]# ll /data01/clickhouse/data total 4 drwxr-x---…