第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.mzph.cn/news/23704.shtml

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

相关文章

面试题总结

文章目录 第一阶段:网络1、osi七层模型、tcp\ip 五层模型2、三次握手四次挥手3、交换机路由器工作原理4、vlan的作用5、icmp协议Linux1、cpu、内存、io、磁盘容量、网络流量、load average2、lvm逻辑卷如何创建3、raid磁盘阵列4、开机引导过程5、软连接硬链接6、查找文件命令7…

前端Vue入门-day07-Vuex入门

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 自定义创建项目 vuex概述 构建 vuex [多组件数据共享] 环境 创建一个空仓库 state 状态 1. 提供数据&…

【云原生】K8S超详细概述

目录 一、Kubernets概述1.1 K8S什么1.2为什么要用K8S 二、Kubernetes 集群架构与组件2.1Master组件Kube-apiserverKube-controller-managerKube-scheduler 2.2 配置存储中心etcd 2.3 Node 组件KubeletKube-Proxydocker 或 rocket 三、 Kubernetes 核心概念3.1Pod3.2Pod 控制器K…

python 变量赋值 修改之后 原值改变

ython 是一种动态语言&#xff0c;因此变量的类型和值 在运行时均可改变。当我们将一个变量赋值给另一个变量时&#xff0c;实际上是将变量的引用地址传递给新的变量&#xff0c;这意 味着新旧变量将指向同一个位置。因此&#xff0c;在更改其中一个变量的值时&#xff0c;另一…

SpringBoot项目-个人博客系统的实现【下】

10.实现强制要求登陆 当用户访问 博客列表页和 博客详情页时, 如果用户当前尚未登陆, 就自动跳转到登陆页面 1.添加拦截器 public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletRespon…

解决Linux下PyCharm无法新建文件

一、问题描述 如图&#xff0c;在Ubuntu Linux系统中使用pycharm管理项目时&#xff0c;提示无法新建.py源文件&#xff1a; 二、问题解决 将问题定性为文件夹&#xff08;目录&#xff09;权限问题&#xff0c;在终端中打开项目文件夹的上级目录&#xff0c;将整个项目目录的…

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

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

你还不快来学习怎么翻译视频中的英语吗

年轻人纪逸是一个对世界充满好奇心的视频爱好者。每当他看到令人激动的视频时&#xff0c;总是忍不住想要将它与更多人分享。然而&#xff0c;有一天&#xff0c;他遇到了一个困扰&#xff1a;他发现了一段精彩的外语视频&#xff0c;但自己并不懂那种语言&#xff01;他犯了愁…

动态规划01: 斐波那契数列模型

第 N 个泰波那契数&#xff08;easy&#xff09; 题目链接: 1137. 第 N 个泰波那契数 题目描述: 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&…

k8s-服务发现service和ingress

回到目录 service用于集群内部应用的网络调用&#xff0c;处理东西流量 ingress用于集群外部用户访问内部服务&#xff0c;处理南北流量 一 kube-proxy三种代理模式 kubernetes集群中有三层网络&#xff0c;一类是真实存在的&#xff0c;例如Node Network、Pod Network,提供真…

Node.js究竟是什么?初学者指南

如果你正在考虑使用JavaScript进行后端开发&#xff0c;你会听到“Node.js”这个术语。Node通常与开发功能强大的web服务器联系在一起。 但 Node.js 究竟是什么&#xff1f;它是和 Angular 一样的 JavaScript 框架吗&#xff1f;它是一种编程语言吗&#xff1f;它是 JavaScrip…

中国中医中药元宇宙 中药材价格缘何“狂飙”

◇相比去年同期&#xff0c;有超200个常规品种涨幅高于50%&#xff0c;25个常用大宗药材涨幅超200%&#xff0c;个别品种甚至涨价4至9倍 ◇在中药材价格普遍高涨的情况下&#xff0c;部分市场仓库库存数量也较多&#xff0c;出现囤积居奇倾向 ◇“不少游资和热钱涌入中药材市场…

Spring Boot + Vue3前后端分离实战wiki知识库系统<十一>--文档管理功能开发三

文档内容的显示&#xff1a; 在上一次Spring Boot Vue3前后端分离实战wiki知识库系统&#xff1c;十&#xff1e;--文档管理功能开发二文档管理模块还差文档的显示木有完成&#xff0c;所以接下来先将这块模块给收尾了。 增加单独获取内容的接口&#xff1a; 概述&#xff…

设计模式、Java8新特性实战 - List<T> 抽象统计组件

一、背景 在日常写代码的过程中&#xff0c;针对List集合&#xff0c;统计里面的某个属性&#xff0c;是经常的事情&#xff0c;针对List的某个属性的统计&#xff0c;我们目前大部分时候的代码都是这样写&#xff0c;每统计一个变量&#xff0c;就要定义一个值&#xff0c;且…

ATTCK实战系列-红队评估 (红日靶场3)Vulnstack三层网络域渗透靶场

文章目录 环境配置靶场介绍靶场设置 外网渗透信息收集端口扫描目录扫描 漏洞发现与利用获取ssh账号密码&#xff0c;登录centos 提权 内网渗透建立代理内网信息收集smb暴破&#xff0c;获取本地管理员密码 横向移动使用psexec模块上线msf 环境配置 靶场介绍 靶场地址 http:/…

剑指Offer 20.表示数值的字符串

20.表示数值的字符串 题目 官方地址 代码&#xff08;正则表达式&#xff09; public boolean isNumeric (String str) {if (str null || str.length() 0)return false;return new String(str).matches("[-]?\\d*(\\.\\d)?([eE][-]?\\d)?"); }在给定的代码…

PCIE链路信息

目录 简介&#xff1a; 目的&#xff1a; 详情&#xff1a; 简介&#xff1a; PCIe有很多寄存器&#xff0c;也有很多控制&#xff0c;包括链路状态信息&#xff0c;上一节我们讲到了PCie的链路训练&#xff0c;这节文章将继续学习PCIe相关知识。 目的&#xff1a; 从设计…

【Python从小白到高手】---函数基础

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Python小白从入门到精通】&#x1f388; 本专栏旨在分享学习Python的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录…

iPhone 6透明屏是什么?原理、特点、优势

iPhone 6透明屏是一种特殊的屏幕技术&#xff0c;它能够使手机屏幕变得透明&#xff0c;让用户能够透过屏幕看到手机背后的物体。 这种技术在科幻电影中经常出现&#xff0c;给人一种未来科技的感觉。下面将介绍iPhone 6透明屏的原理、特点以及可能的应用。 iPhone 6透明屏的原…

本地 shell无法连接centos 7 ?

1、首先检查是否安装ssh服务&#xff1b; yum list installed | grep openssh-server# 没有安装尝试安装下 yum install openssh-server 2、检查ssh服务是否开启 systemctl status sshd.service# 未开启&#xff0c;开启下 systemctl start sshd.service # 将sshd 服务添…