当前位置: 首页 > news >正文

Vue|事件处理

事件处理

    • 1. 事件使用
      • 1.1 事件绑定
      • 1.2 事件参数
    • 2. 事件修饰符
      • 2.1 阻止默认事件
      • 2.2 阻止事件冒泡
      • 2.3 事件只允许触发一次
      • 2.4 事件捕获
      • 2.5 操作当前元素
      • 2.6 行为立即执行无需等待回调
    • 3. 键盘事件
    • 4. 本章小结
      • 4.1 事件使用小结
      • 4.2 事件修饰符小结
      • 4.3 键盘事件小结

1. 事件使用

1.1 事件绑定

接上章内容,在project目录创建事件处理文件夹以及3个html文件

在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>事件处理</title><script src="../js/vue.js" type="text/javascript"></script>
</head>
<body><!-- 准备好一个容器 --><div id="root"><h2>{{name}}</h2></div><script type="text/javascript">//Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。// 创建vue实例const vm = new Vue({el:'#root',//函数式data:function(){return{name:'摔跤猫子',};},});</script>
</body>
</html>

需求1:点击一个弹窗显示摔跤猫子,这是一个很简单的需求,想必大家都能很快实现

在这里插入图片描述

	<!-- 需求1 点击按钮 弹窗摔跤猫子 --><button onclick="alert1()">需求1</button><script>function alert1(){alert('摔跤猫子');}</script>

但我们现在是在vue,所以上述方式不可取,得用vue的方式来实现
第一步:将button中click修改为v-on:click
第二步:在vue实例中增加一个methods并实现对应的响应函数

在这里插入图片描述

<!-- 需求1 点击按钮 弹窗摔跤猫子 -->
<button v-on:click="alert1">需求1</button><script type="text/javascript">Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。// 创建vue实例const vm = new Vue({el:'#root',//函数式data:function(){return{name:'摔跤猫子',};},methods:{alert1(){alert('摔跤猫子');},},});
</script>

事件简写,可以将v-on:替换成一个@符,效果也是一致的

在这里插入图片描述

<!-- 需求1 点击按钮 弹窗摔跤猫子 -->
< v-on:click="alert1">需求1</>
<!-- 需求1简写方式 -->
<button @click="alert1">需求1简写</button>

1.2 事件参数

需求2:点击按钮时传递参数;例如我们在一个数据列表中想要通过点击按钮的操作来查看某条数据时,就必须要通过单个的标识符来查询;可以看到如下图,在需求2的按钮并没有传递参数,但是直接在alert2函数中进行接收并输出也是有数据显示,因为此处的event是vue实例对象

在这里插入图片描述

那如果需要传递页面上的参数该如何操作呢?只需要在函数后增加一个括号并填写数据即可

在这里插入图片描述

<!-- 需求1 点击按钮 参数传递 -->
<button v-on:click="alert2('摔跤猫子')">需求2</button>

那么新的问题又来了,我既想要接收到vue实例,又想接收页面参数呢该如何操作呢?是不是在对应的JS函数中再加一个event就可以呢?

在这里插入图片描述

可以看到答案是否定的,第二个参数输出的是undefined,正确的方式是在html标签中输入$event关键字即可,vue会自动进行解析,同时参数顺序是一一对应的

在这里插入图片描述

<!-- 需求1 点击按钮 参数传递 -->
<button v-on:click="alert2('摔跤猫子',$event)">需求2</button>

2. 事件修饰符

在Vue中,事件修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间去处理这些烦恼的事情,而能有更多的精力专注于程序的逻辑处理。

修饰符作用
prevent阻止默认事件
stop阻止事件冒泡
once事件只触发一次
capture使用事件的捕获模式
self只有event.target是当前操作的元素时才触发事件
passive事件的默认行为立即执行,无需等待事件回调执行完毕

2.1 阻止默认事件

需求1:阻止默认事件,点击a标签显示弹窗,并阻止a标签的默认行为,不让页面跳转;可以看到如下图,当点击完a标签之后,先弹出弹窗,然后页面会自动跳转,那么就需要通过prevent函数来进行阻止了

在这里插入图片描述

可以看到如下图所示,点击完a标签过后,页面并未跳走,实现方式如下

实现方式代码
通过函数阻止e.preventDefault();
写在click后面@click.prevent

在这里插入图片描述

2.2 阻止事件冒泡

需求2:阻止事件冒泡,避免操作多次;
常见场景:如下图一个商品列表,点击图片或者其他商品信息区域即跳转商品详情,而点击购物车图标时则只做加入购物车操作。

在这里插入图片描述

实现对应的页面布局以及对应的响应函数如下,这里样式简单弄一下只为达到演示效果,注意加入购物车按钮要包含在大容器盒子里。

在这里插入图片描述

这时候如果点击加入购物车按钮,那么两个函数都会响应,可以看到先是弹出的加入购物车,然后又弹出的进入详情

在这里插入图片描述

如何将他们有效的分离从而达到阻止事件冒泡的效果呢,实现方式如下

实现方式代码
通过函数阻止e.stopPropagation();
写在click后面@click.stop

在这里插入图片描述

<!-- 需求2:阻止事件冒泡,避免响应多次 -->
<div @click="alert1" class="div1">商品信息<button @click.stop="alert2">加购</button>
</div>

2.3 事件只允许触发一次

顾名思义,在页面无刷新重新加载的情况下,只允许加载一次;在未使用该修饰符前效果如下图所示,点击一次触发一次

在这里插入图片描述

<!-- 需求3:按钮只触发一次 -->
<button @click="alert1">只让触发一次</button>

如果业务上限制了用户在不刷新页面的前提下只能点击一次该如何处理呢?如下图所示,在无刷新的情况下只触发了一次函数

实现方式代码
写在click后面@click.once

在这里插入图片描述

2.4 事件捕获

可以继续使用需求2的代码来实现案例效果。

在这里插入图片描述
在这里插入图片描述

在现在这种情况下默认是先冒泡再捕获,也就是当点击加购时,是先弹出加购文本然后才是详情

在这里插入图片描述

如果需要使用事件的捕获模式,先捕获,再冒泡,就是达到点击加购时先弹出详情,再弹出加购时则需要使用到如下修饰符

实现方式代码
写在click后面@click.capture

在这里插入图片描述

2.5 操作当前元素

这个修饰符的作用是只有event.target是当前操作的元素时才触发事件,准备代码如下;

在这里插入图片描述
在这里插入图片描述

当点击button按钮时会输出什么呢?它无法定位到当前操作的元素是哪部分,界面上一个div和一个按钮只输出了按钮

在这里插入图片描述

给事件后面增加上self修饰符再试一下,现在点击按钮只会输出按钮的那部分了,只有当点击外部div的时候才会输出相对应的结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6 行为立即执行无需等待回调

事件的默认行为立即执行,无需等待事件回调执行完毕;准备一个div,内容高度需超出外部盒子高度,达到滚动条效果

在这里插入图片描述

<style>*{margin-top:20px;}.content{width:200px;height:200px;background:green;overflow: auto;color:white;}.content div{height: 100px;}
</style>
<div class="content"><div></div><div></div><div></div><div></div>
</div>

给外部div添加一个滚动事件并监听,可以使用scroll也可以使用wheel

在这里插入图片描述

给滚动事件增加修饰符达到事件立即执行的效果

实现方式代码
写在click后面@click.passive
<div class="content" @wheel="roll"><div></div><div></div><div></div><div></div>
</div>

这样看上去效果并不是很明显,先给函数增加一个十万次的for循环,来看一下使用修饰符之前以及之后的效果;如下图就能直观的看到,没有使用修饰符前需要先等结果输出完才能滚动滚动条,但使用了修饰符后,输出循环的结果以及滚动滚动条两者互不冲突

在这里插入图片描述
在这里插入图片描述

3. 键盘事件

准备一个input文本框,可以分别尝试使用不同的键盘事件;keydowm是你按下按钮,不需要松手抬起即触发,keyup需要你按下去并松手才触发,也可以通过不同的按键修饰符达到特殊的效果

<input placeholder="回车提示所输入的值" @keyup="alertValue" />

在这里插入图片描述

按键别名
回车enter
删除delete
退出esc
space
换行tab
up
down
left
right

4. 本章小结

4.1 事件使用小结

使用v-on:click 或 通过简写@xxx 绑定事件,其中xxx是事件名称
事件的回调需要配置在methods对象中,最终会在vm上;
@click="demo”和 @click="demo($event)” 两者效果一致,但后者可以传参;

4.2 事件修饰符小结

prevent:阻止默认事件
stop:阻止事件冒泡
once:事件只触发一次
capture:使用事件的捕获模式
self:只有event.target是当前操作的元素时才触发事件
passive:事件的默认行为立即执行,无需等待事件回调执行完毕,只有当使用wheel事件时才会有这种问题,做移动端开发的时候可能会使用到passive

4.3 键盘事件小结

Vue未提供别名的按键,可以使用按健原始的key值去绑定,但注意要转为kebab-case(短横线命名)
系统修饰键 (用法特殊) : ctr1、alt、shift、meta
(1).配合keyup使用: 按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。
(2).配合keydown使用: 正常触发事件
可以使用keyCode去指定具体的按键
Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键别名

相关文章:

Vue|事件处理

事件处理1. 事件使用1.1 事件绑定1.2 事件参数2. 事件修饰符2.1 阻止默认事件2.2 阻止事件冒泡2.3 事件只允许触发一次2.4 事件捕获2.5 操作当前元素2.6 行为立即执行无需等待回调3. 键盘事件4. 本章小结4.1 事件使用小结4.2 事件修饰符小结4.3 键盘事件小结1. 事件使用 1.1 事…...

css书写方式

目录标题一、css是什么&#xff1f;二、css的书写方式1、行内样式【不推荐使用&#xff0c;太固定】2、页面样式&#xff08;又叫内联样式&#xff09;3、外联样式【店家推荐】4、import与link标签的区别一、css是什么&#xff1f; css(cascade style sheet)是用来装饰和装扮页…...

Python网络爬虫 学习笔记(2)BeaufitulSoup库

文章目录BeautifulSoup库的基本介绍HTML标签的获取和相关属性HTML文档的遍历prettify()方法使用BeautifulSoup库对HTML文件进行内容查找信息的标记的相关概念&#xff08;非重点&#xff09;find_all()方法&#xff08;重点&#xff09;综合实例&#xff1a;爬取软科2022中国大…...

JavaScript------内建对象

一、解构赋值 1、数组的解构 1.1、解构赋值 const arr ["孙悟空", "猪八戒", "沙和尚"];let a, b, c;[a, b, c] arr; // 等同于 [a, b, c] ["孙悟空", "猪八戒", "沙和尚"] 1.2、声明同时解构 let [d, e…...

React + Redux 处理异步请求

redux 处理异步请求 方式一:在 componentDidmount 中直接进⾏请求,在将数据同步到 redux 创建 Store 仓库 import {createStore } from redux;const defaultState = {banners: [] }const reducer =...

揭秘涨薪50%经验:从功能测试到自动化测试,我是如何蜕变的?

本人在今年互联网大环境如此严峻的情况下&#xff0c;作为一个刚毕业不到一年的初级测试&#xff0c;赶在“金三银四”依然拿到了一些面试机会&#xff0c;并且成功拿下4家公司的offer&#xff0c;其中不乏互联网大厂&#xff0c;而且最高总包给到了接近double&#xff08;无炫…...

【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能

【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能 【论文原文】&#xff1a;A New Local Transformation Module for Few-shot Segmentation 【作者信息】&#xff1a;Yuwei Yang, Fanman Meng, Hongliang Li, Qingbo Wu,Xiaolong Xu an…...

补充前端面试题(二)

#$set数据变化视图不更新问题, 当在项目中直接设置数组的某一项的值&#xff0c;或者直接设置对象的某个属性值&#xff0c;这个时候&#xff0c;你会发现页面并没有更新。这是因为 Object.defineProperty()限制&#xff0c;监听不到变化。解决方式&#xff1a;this.$set(你要改…...

JavaScript原型、原型链、原型方法

文章目录原型和原型链prototype、 __ proto __ 、constructor原型链原型方法instanceOfhasOwnPropertyObject.create()、new Object()总结原型和原型链 prototype、 __ proto __ 、constructor 首先我们看下面一段代码 // 构造函数Personfunction Person(name, age) {this.na…...

linux篇【14】:网络https协议

目录 一.HTTPS介绍 1.HTTPS 定义 2.HTTP与HTTPS &#xff08;1&#xff09;端口不同&#xff0c;是两套服务 &#xff08;2&#xff09;HTTP效率更高&#xff0c;HTTPS更安全 3.加密&#xff0c;解密&#xff0c;密钥 概念 4.为什么要加密&#xff1f; 5.常见的加密方式…...

1.9实验9:配置虚链路

1.4.4实验9:配置虚链路 实验目的(1) 实现OSPF 虚链路的配置 (2) 描述虚链路的作用 实验拓扑配置虚链路实验拓扑如图1-19所示。[1] 图1-19 配置虚链路 实验步骤...

三次握手-升级详解-注意问题

TCP建立连接的过程就是三次握手&#xff08;Three-way Handshake&#xff09;&#xff0c;在建立连接的过程实际上就是客户端和服务端之间总共发送三个数据包。进行三次握手主要是就是为了确认双方都能接收到数据包和发送数据包&#xff0c;而客户端和服务端都会指定自己的初始…...

软件架构知识3-系统复杂度-高可用性、可扩展性、低成本、安全、规模

高可用性 系统无中断地执行其功能的能力&#xff0c;代表系统的可用性程度&#xff0c;是进行系统设计时的准则之一。 高可用的“冗余”解决方案&#xff0c;单纯从形式上来看&#xff0c;和之前讲的高性能是一样的&#xff0c;都是通过增加更多机 器来达到目的&#xff0c;但…...

SpringCloud学习笔记 - 自定义及解耦降级处理方法 - Sentinel

1. SentinelRecourse配置回顾 通过之前的学习&#xff0c;我们知道SentinelRecourse配置的资源定位可以通过两种方式实现&#xff1a;一种是URL&#xff0c;另一种是资源名称。这两种限流方式都要求资源ID唯一 RestController public class RateLimitController {GetMapping(…...

Redis之搭建一主多从

搭建redis一主多从的过程 1.在相应位置创建一个文件夹存放redis配置文件 mkdir myredis2.复制redis配置文件到此文件夹中 cp /opt/redis/redis/bin/redis.conf /opt/myredis/redis.conf3.新建三个配置文件 touch redis6379.conf touch redis6380.conf touch redis6381.conf4…...

Transformer机制学习笔记

学习自https://www.bilibili.com/video/BV1J441137V6 RNN&#xff0c;CNN网络的缺点 难以平行化处理&#xff0c;比如我们要算b4b^4b4&#xff0c;我们需要一次将a1a^1a1~a4a^4a4依次进行放入网络中进行计算。 于是有人提出用CNN代替RNN 三角形表示输入&#xff0c;b1b^1b1的…...

1、第一个CUDA代码:hello gpu

目录第一个CUDA代码&#xff1a;hello gpu一、__global__ void GPUFunction()二、gpu<<<1,1>>>();三、线程块、线程、网格知识四、核函数中的printf();五、cudaDeviceSynchronize();第一个CUDA代码&#xff1a;hello gpu #include <stdio.h>void cpu(…...

UG二次开发装配篇 添加/拖动/删除组件方法的实现

我们在UG装配的过程中&#xff0c;经常会遇到需要调整组件目录位置&#xff0c;在软件设计过程中可以通过在目录树里面拖动组件来完成。 那么&#xff0c;如果要用程序实现组件的移动/拖动&#xff0c;我们要怎么做呢&#xff1f; 本节就完成了添加/拖动/删除组件方法的实现&…...

【ros bag 包的设计原理、制作、用法汇总】

ros bag 包的设计原理 序列化和反序列化 首先知道Bag包就是为了录制消息,而消息的保存和读取就涉及到一个广义上的问题序列化和反序列化,它基本上无处不在,只是大部分人没有注意到,举个简单的例子,程序运行的时候,是直接操作的内存,也就是一个结构体或者一个对象,但内…...

Linux网络:聚合链路技术

目录 一、聚合链路技术 1、bonding作用 2、Bonding聚合链路工作模式 3、Bonding实现 一、聚合链路技术 1、bonding作用 将多块网卡绑定同一IP地址对外提供服务&#xff0c;可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过 bonding&#xff0c…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...