重新學習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
英文地址,請注明出處:http://en.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;以渲染一個包含多個節點的結構快 并不是一個組件…