重新学习Vue中的按键监听和鼠标监听

在这里插入图片描述

文章目录

  • 按键事件
    • 1. 使用 `@keyup.enter` 修饰符
    • 2. 使用 `v-on` 监听键盘事件
    • 3. 在组件上监听原生事件
      • Vue 2
      • Vue 3
    • 4. 全局监听键盘事件
    • 注意事项
  • 鼠标事件
    • 1. 基本鼠标事件监听
      • 常用鼠标事件
    • 2. 事件修饰符
    • 3. 鼠标按键检测
    • 4. 鼠标位置信息
    • 5. 自定义指令监听鼠标事件
    • 6. 组合鼠标事件
    • 7. 性能优化建议

在这里插入图片描述

按键事件

在 Vue 中,有几种方法可以监听 Enter 按键事件。以下是常见的实现方式:

1. 使用 @keyup.enter 修饰符

<template><input type="text" v-model="inputValue"@keyup.enter="handleEnter"placeholder="按Enter键触发">
</template><script>
export default {data() {return {inputValue: ''}},methods: {handleEnter() {console.log('Enter键被按下', this.inputValue)// 在这里处理Enter键按下的逻辑}}
}
</script>

2. 使用 v-on 监听键盘事件

<template><input type="text" v-model="inputValue"@keyup="checkEnter"placeholder="按Enter键触发">
</template><script>
export default {data() {return {inputValue: ''}},methods: {checkEnter(event) {if (event.key === 'Enter') {console.log('Enter键被按下', this.inputValue)// 在这里处理Enter键按下的逻辑}}}
}
</script>

3. 在组件上监听原生事件

如果是在自定义组件上监听,需要使用 .native 修饰符(Vue 2)或 v-on 的写法(Vue 3):

Vue 2

<my-component @keyup.enter.native="handleEnter" />

Vue 3

<my-component @keyup.enter="handleEnter" />

4. 全局监听键盘事件

<template><div><!-- 内容 --></div>
</template><script>
export default {mounted() {window.addEventListener('keyup', this.handleGlobalKeyUp)},beforeDestroy() {window.removeEventListener('keyup', this.handleGlobalKeyUp)},methods: {handleGlobalKeyUp(event) {if (event.key === 'Enter') {console.log('全局Enter键被按下')// 在这里处理全局Enter键按下的逻辑}}}
}
</script>

注意事项

  1. 按键修饰符是基于 key 事件暴露的,所以确保使用 keyupkeydown 事件
  2. Vue 提供了以下按键别名:.enter, .tab, .delete, .esc, .space, .up, .down, .left, .right
  3. 也可以使用按键码(虽然不推荐,因为已废弃):@keyup.13(13是Enter的键码)

在这里插入图片描述

鼠标事件

1. 基本鼠标事件监听

常用鼠标事件

<template><div @click="handleClick"          <!-- 单击 -->@dblclick="handleDoubleClick"  <!-- 双击 -->@mousedown="handleMouseDown"   <!-- 鼠标按下 -->@mouseup="handleMouseUp"      <!-- 鼠标释放 -->@mousemove="handleMouseMove"  <!-- 鼠标移动 -->@mouseover="handleMouseOver"  <!-- 鼠标移入 -->@mouseout="handleMouseOut"    <!-- 鼠标移出 -->@mouseenter="handleMouseEnter" <!-- 鼠标进入(不冒泡) -->@mouseleave="handleMouseLeave" <!-- 鼠标离开(不冒泡) -->@contextmenu="handleContextMenu" <!-- 右键菜单 -->>鼠标事件区域</div>
</template><script>
export default {methods: {handleClick(event) {console.log('单击事件', event)},handleDoubleClick(event) {console.log('双击事件', event)},// 其他事件处理函数...}
}
</script>

2. 事件修饰符

Vue 提供了一些有用的修饰符来处理鼠标事件:

<template><div><!-- 阻止默认行为 --><a href="#" @click.prevent="handleClick">阻止默认跳转</a><!-- 阻止事件冒泡 --><div @click="outerClick"><div @click.stop="innerClick">点击我不会冒泡到外层</div></div><!-- 事件只触发一次 --><button @click.once="handleOnceClick">只会触发一次</button><!-- 左/中/右键点击 --><div @click.left="leftClick">左键点击</div><div @click.middle="middleClick">中键点击</div><div @click.right="rightClick">右键点击</div><!-- 串联修饰符 --><button @click.stop.prevent="handleClick">阻止冒泡和默认行为</button></div>
</template>

3. 鼠标按键检测

可以通过事件对象检测具体按下了哪个鼠标按键:

methods: {handleMouseDown(event) {// 0: 左键, 1: 中键, 2: 右键console.log('按下的按键:', event.button)// 检测组合键if (event.ctrlKey) console.log('按下了Ctrl键')if (event.shiftKey) console.log('按下了Shift键')if (event.altKey) console.log('按下了Alt键')if (event.metaKey) console.log('按下了Meta键(Command键)')}
}

4. 鼠标位置信息

可以从事件对象获取鼠标位置信息:

methods: {handleMouseMove(event) {// 相对于浏览器窗口的坐标console.log('clientX:', event.clientX, 'clientY:', event.clientY)// 相对于文档的坐标console.log('pageX:', event.pageX, 'pageY:', event.pageY)// 相对于事件元素的坐标console.log('offsetX:', event.offsetX, 'offsetY:', event.offsetY)// 相对于屏幕的坐标console.log('screenX:', event.screenX, 'screenY:', event.screenY)}
}

5. 自定义指令监听鼠标事件

可以创建自定义指令来监听鼠标事件:

// 全局注册
Vue.directive('mouse-tooltip', {bind(el, binding) {el.addEventListener('mouseenter', () => {// 显示工具提示逻辑console.log('鼠标进入', binding.value)})el.addEventListener('mouseleave', () => {// 隐藏工具提示逻辑console.log('鼠标离开')})}
})// 使用
<div v-mouse-tooltip="'提示内容'">悬停我显示提示</div>

6. 组合鼠标事件

可以组合多个鼠标事件实现复杂交互:

<template><div @mousedown="startDrag"@mousemove="handleDrag"@mouseup="endDrag"@mouseleave="endDrag">可拖拽区域</div>
</template><script>
export default {data() {return {isDragging: false,startX: 0,startY: 0}},methods: {startDrag(event) {this.isDragging = truethis.startX = event.clientXthis.startY = event.clientY},handleDrag(event) {if (!this.isDragging) returnconst dx = event.clientX - this.startXconst dy = event.clientY - this.startYconsole.log(`拖拽距离: x=${dx}, y=${dy}`)},endDrag() {this.isDragging = false}}
}
</script>

7. 性能优化建议

  1. 对于频繁触发的事件(如 mousemove),使用防抖或节流:

    import { debounce } from 'lodash'methods: {handleMouseMove: debounce(function(event) {// 防抖处理后的函数}, 100)
    }
    
  2. 不需要时及时移除事件监听器,特别是在组件销毁时

  3. 对于大量元素的事件监听,考虑使用事件委托

这些方法覆盖了 Vue 中处理鼠标事件的主要场景,根据具体需求选择合适的方式即可。

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

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

相关文章

vue2启动问题以及解决方案

vue2启动时&#xff1a;ERROR Invalid options in vue.config.js: "typescript.validate.enable" is not allowed如果需要在 VSCode 中控制 TypeScript 验证&#xff1a;在项目根目录创建 .vscode/settings.json 文件&#xff08;如不存在&#xff09;添加以下配置&a…

Vue响应式系统:从原理到核心API全解析

响应式原理 响应式机制的主要功能就是&#xff0c;可以把普通的JavaScript对象封装成为响应式对象&#xff0c;拦截数据的读取和设置操作&#xff0c;实现依赖数据的自动化更新。 Q: 如何才能让JavaScript对象变成响应式对象&#xff1f; 首先需要认识响应式数据和副作用函数…

水下目标检测:突破与创新

水下目标检测技术背景 水下环境带来独特挑战&#xff1a;光线衰减导致对比度降低&#xff0c;散射引发图像模糊&#xff0c;色偏使颜色失真。动态水流造成目标形变&#xff0c;小目标&#xff08;如1010像素海胆&#xff09;检测困难。声呐与光学数据融合可提升精度&#xff0…

高通SG882G平台(移远):2、使用docker镜像编译

其实之前已经编译过了。今日搜索时发现&#xff0c;只有当时解决问题的汇总&#xff0c;没有操作步骤。于是记录下来。 建议使用Ubuntu20 LTS。 安装docker $ sudo apt update $ sudo apt install docker.io $ sudo docker -v Docker version 27.5.1, build 27.5.1-0ubuntu3…

轻松上手:使用Nginx实现高效负载均衡

接上一篇《轻松上手&#xff1a;Nginx服务器反向代理配置指南》后&#xff0c;我们来探讨一下如何使用Nginx实现高效负载均衡。 在当今高并发、大流量的互联网环境下&#xff0c;单台服务器早已无法满足业务需求。想象一下&#xff1a;一次电商平台的秒杀活动、一个热门应用的…

身份证号码+姓名认证接口-身份证二要素核验

身份证号实名认证服务接口采用身份证号码、姓名二要素核验的方式&#xff0c;能够快速确认用户身份。无论是新用户注册&#xff0c;还是老用户重要操作的身份复核&#xff0c;只需输入姓名及身份证号&#xff0c;瞬间即可得到 “一致” 或 “不一致” 的核验结果。这一过程高效…

自动驾驶基本概念

目录 自动驾驶汽车&#xff08;Autonomous Vehicles &#xff09; 单车智能 车联网 智能网联&#xff08;单车智能车联网&#xff09; 自动驾驶关键技术 环境感知与定位 车辆运动感知 车辆运动感知 路径规划与决策 自动驾驶发展历程 自动驾驶应用场景 自动驾驶路测…

提示词框架(10)--COAST

目前&#xff0c;有很多提示词框架都叫COAST&#xff0c;但是每个的解释都不同&#xff0c;出现很了很多解释和演化版本&#xff0c;不要在意这些小事&#xff0c;我们都是殊途同归--让AI更好的完成任务COAST框架&#xff0c;比较适合需要详细背景和技术支持的任务&#xff0c;…

基于selenium实现大麦网自动抢票脚本教程

闲来无事&#xff0c;打开大麦网发现现在大多数演唱票都需要手机端才能抢票&#xff0c;仅有很少一部分支持pc端用网页去抢票&#xff0c;但正所谓&#xff1a;道高一尺&#xff0c;魔高一丈&#xff0c;解决这个反爬问题&#xff0c;我们可以采用Airtest连接仿真机来模拟手机端…

2048小游戏实现

2048小游戏实现 将创建一个完整的2048小游戏&#xff0c;包含游戏核心逻辑和美观的用户界面。设计思路 4x4网格布局响应式设计&#xff0c;适配不同设备分数显示和最高分记录键盘控制&#xff08;方向键&#xff09;和触摸滑动支持游戏状态提示&#xff08;胜利/失败&#xff0…

Windows VMWare Centos Docker部署Springboot + mybatis + MySql应用

前置文章 Windows VMWare Centos环境下安装Docker并配置MySqlhttps://blog.csdn.net/u013224722/article/details/148928081 Windows VMWare Centos Docker部署Springboot应用https://blog.csdn.net/u013224722/article/details/148958480 Windows VMWare Centos Docker部署…

【科普】Cygwin与wsl与ssh连接ubuntu有什么区别?DIY机器人工房

Cygwin、WSL&#xff08;Windows Subsystem for Linux&#xff09;和通过 SSH 连接 Ubuntu 是三种在 Windows 环境下与类 Unix/Linux 系统交互的工具&#xff0c;但它们的本质、运行环境、功能范围有显著区别。以下从核心定义、关键差异和适用场景三个维度详细说明&#xff1a;…

Web前端数据可视化:ECharts高效数据展示完全指南

Web前端数据可视化&#xff1a;ECharts高效数据展示完全指南 当产品经理拿着一堆密密麻麻的Excel数据走向你时&#xff0c;你知道又到了"化腐朽为神奇"的时刻。数据可视化不仅仅是把数字变成图表那么简单&#xff0c;它是将复杂信息转化为直观洞察的艺术。 在过去两…

# IS-IS 协议 | LSP 传输与链路状态数据库同步机制

略作整理&#xff0c;待校。 SRM 和 SSN 标志的作用 SRM 标志 功能&#xff1a;SRM 标志用于跟踪路由器从一个接口向邻居发送链路状态协议数据单元&#xff08;LSP&#xff09;的状态。作用&#xff1a;确保 LSP 的正确传输和状态跟踪。 SSN 标志 广播网络 功能&#xff1…

Windows DOS CMD 100

1. systeminfo&#xff1a;显示系统详细信息&#xff08;安装日期/补丁/内存等&#xff09; 2. sfc /scannow&#xff1a;扫描并修复系统文件损坏 [管理员] 3. chkdsk /f&#xff1a;检查磁盘错误并修复&#xff08;需重启&#xff09; [管理员] 4. cleanmgr&#xff1a;启动…

HTML初学者第三天

<1>文档类型声明标签——<!DOCTYPE><!DOCTYPE>文档声明&#xff0c;作用是告诉浏览器使用哪种HTML版本来显示网页。<!DOCTYPE html>这句代码的意思是&#xff1a;当前页面采用的是HTML5版本来显示网页。注意&#xff1a;-<!DOCTYPE>声明位于文档…

学车笔记6

“不踩离合利用发动机制动”是指在驾驶过程中&#xff0c;驾驶员抬起油门踏板&#xff0c;但不踩下离合器踏板&#xff0c;利用发动机自身的阻力来减缓车辆速度的一种制动方式。具体介绍如下&#xff1a; #### 原理 - **动力传递反向**&#xff1a;正常情况下&#xff0c;发动…

人体坐姿检测系统项目教程(YOLO11+PyTorch+可视化)

&#x1f4a1;本文主要内容&#xff1a;本项目基于YOLO11深度学习目标检测算法&#xff0c;设计并实现了一个人体坐姿检测系统。系统能够自动识别图像或视频中的多种坐姿类型&#xff08;如&#xff1a;正常坐姿、不良坐姿等&#xff09;&#xff0c;为健康监测、智能教室、办公…

服务网格可观测性深度实践与创新优化

主题&#xff1a;突破服务网格监控瓶颈——基于eBPF的无侵入式全链路可观测性实践 技术领域&#xff1a;云原生/微服务/服务网格&#xff08;Service Mesh&#xff09; 一、问题背景&#xff1a;传统服务网格监控的痛点 在Istio、Linkerd等服务网格架构中&#xff0c;可观测…

微信小程序41~50

1.列表渲染-进阶用法 如果要对默认的变量名和下标进行修改&#xff0c;可以使用wx:for-item和wx:for-index wx:for-item可以指定数组当前元素的变量名 wx:for-index可以指定数组当前下标的变量名将wx:for用在标签上&#xff0c;以渲染一个包含多个节点的结构快 并不是一个组件…