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

目录

  • 一、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);// trueconsole.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.rhkb.cn/news/76270.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows docker部署

windows docker部署 使用 Docker Desktop for Windows安装Docker问题&#xff1a;Update the WSL kernel by running "wsl --update" or follow instructions at https://docs.microsoft.com/windows/wsl/wsl2-kernel.问题描述&#xff1a;解决办法&#xff0c;升级W…

软考A计划-系统集成项目管理工程师-信息系统安全管理-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

前端(十一)——Vue vs. React:两大前端框架的深度对比与分析

&#x1f60a;博主&#xff1a;小猫娃来啦 &#x1f60a;文章核心&#xff1a;Vue vs. React&#xff1a;两大前端框架的深度对比与分析 文章目录 前言概述原理与设计思想算法生态系统与社区支持API与语法性能与优化开发体验与工程化对比总结结语 前言 在当今快速发展的前端领…

Jenkins 节点该如何管理?

Jenkins 拥有分布式构建(在 Jenkins 的配置中叫做节点)&#xff0c;分布式构建能够让同一套代码在不同的环境(如&#xff1a;Windows 和 Linux 系统)中编译、测试等 Jenkins 的任务可以分布在不同的节点上运行 节点上需要配置 Java 运行时环境&#xff0c;JDK 版本大于 1.5 节…

917.仅仅反转字母+HJ1.字符串最后一个单词的长度

一、仅仅反转字母 917. 仅仅反转字母 - 力扣&#xff08;LeetCode&#xff09; 二、代码 双指针 class Solution { public:bool IsABC(char ch){if(ch>a &&ch<z)return true;if(ch>A && ch<Z)return true;return false;}string reverseOnlyLett…

Flutter 文件上传(七牛云)简单封装

前言&#xff1a;记录了七牛云上传图片的简单封装、若有不足 欢迎指正。 开始前准备&#xff1a; A、七牛sdk版本一定要和dart版本相对应&#xff08;推荐用any方式、让其自己去匹配&#xff09;&#xff1b; qiniu_flutter_sdk: any B、七牛上传文件所需的参数&#xff1a; …

Windows terminal 添加 git bash 解决git中文乱码显示问题

Windows terminal 添加 git bash 解决git中文乱码显示问题 在 windows terminal 中配置git 说明&#xff1a; 点击箭头选择设置 说明&#xff1a; 点击"添加新配置文件"配置名称命令行&#xff0c;可执行文件的具体语句 C:\Program Files\Git\bin\bash.exe启动目录…

Java Runnable,Callable和FutureTask详解

目 录 1 序言 2 基本概念 2.1 Runnable 和 Callable的区别 2.2 Future 和 FutureTask 2.3 ExecutorService中Future的应用 2.4 Future submit(Runnable task) 2.5 Future submit(Callable task) 2.6 ExecutorService中execute()在ThreadPoolExecutor中实现如下&#xff…

C# PaddleDetection 版面分析

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using Sdcb.PaddleDetection; using Sdcb.PaddleInference; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin…

途游游戏 x 极狐GitLab “通关” DevOps :单元测试从无到优,覆盖率 0→80%

目录 4 个工具孤岛 → 极狐GitLab 全家桶&#xff0c; 被动的「人找进度」 → 高效的「进度找人」 把 Code Review 做扎实 代码质量「向左移」&#xff0c;修复成本「往下降」 从无到「优」 自动执行单元测试&#xff0c;覆盖率 0→80% 你喜欢玩游戏吗&#xff1f; 最近…

码题集oj赛(第八次)——MT2179 01操作

一、题目 二、格式 三、样例 //输入&#xff1a; 4 10 1101 */-*-*-/*/ //输出&#xff1a; 10110注意&#xff1a; 四、代码实现 #include<bits/stdc.h> using namespace std; const int N 5e7 7; int n, m; char a[N], c; int main() {cin>>n>>m>…

MIT 6.824 -- MapReduce -- 01

MIT 6.824 -- MapReduce -- 01 引言抽象和实现可扩展性可用性(容错性)一致性MapReduceMap函数和Reduce函数疑问 课程b站视频地址: MIT 6.824 Distributed Systems Spring 2020 分布式系统 推荐伴读读物: 极客时间 – 大数据经典论文解读DDIA – 数据密集型应用大数据相关论文…

Elasticsearch官方测试数据导入

一、数据准备 百度网盘链接 链接&#xff1a;https://pan.baidu.com/s/1rPZBvH-J0367yQDg9qHiwQ?pwd7n5n 提取码&#xff1a;7n5n文档格式 {"index":{"_id":"1"}} {"account_number":1,"balance":39225,"firstnam…

Python(六十七)什么是元组

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

全志F1C200S嵌入式驱动开发(应用程序开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 我们在开发soc驱动的时候,很多情况下也要验证下当前的驱动功能是否正确。当然除了验证驱动功能之外,我们还要编写业务代码和流程代码。这中间就和各行各业有关了,有的是算法,有…

MySQL常见问题处理(三)

MySQL 常见问题解决 夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库安装(二), 如果没有看过, 请观看上一章 一. root 用户密码忘记&#xff0c;进行重置操作 复制内容来源链接: https://blog.csdn.net/weixin_48927364/article/details/123556927 一.…

java io流 学习笔记

1. IO 流能干什么 通过IO我们能对硬盘文件进行读和写。(网络数据的传输也涉及到io)。 2. IO流的分类 按照 流的方向 进行分类&#xff1a;分为输入、输出流。 往内存中去&#xff1a;叫做输入(Input)。或者叫做读(Read)。 从内存中出来&#xff1a;叫做输出(Output)。或者叫…

EVE-NG MPLS LDP LSP

目录 1 拓扑 2 配置步骤 2.1 配置接口IP 2.2 配置OSPF 2.3 使能LDP 2.3 在VPC上验证 1 拓扑 2 配置步骤 2.1 配置接口IP LER1 interface LoopBack 0ip address 1.1.1.9 32 quitinterface GigabitEthernet1/0ip address 10.1.1.1 255.255.255.0quitinterface GigabitEth…

基于Java+SpringBoot+SpringCloud+Vue的智慧养老平台设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

VSCode配置SSH远程免密登录服务器

VScode远程开发时&#xff0c;每次都需要输入密码&#xff0c;其实同理可以和其他应用类似配置免密登录&#xff0c;流程也类似。 1.在本地主机生成公钥和秘钥 ssh-keygen 2.将公钥内容添加至服务器 将生成钥对时会给出其保存路径&#xff0c;找到公钥&#xff0c;复制内容&am…