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

4.2 Sensors -- onKeyStroke

4.2 Sensors – onKeyStroke

https://vueuse.org/onKeyStroke

作用

监听键盘按键是否被点击

官方示例

  • 监听一个按键
import { onKeyStroke } from '@vueuse/core'onKeyStroke('ArrowDown', (e) => {e.preventDefault()
})
  • 监听多个按键
import { onKeyStroke } from '@vueuse/core'onKeyStroke(['s', 'S', 'ArrowDown'], (e) => {e.preventDefault()
})// listen to all keys by [true / skip the keyDefine]
onKeyStroke(true, (e) => {e.preventDefault()
})
onKeyStroke((e) => {e.preventDefault()
})
  • 自定义事件目标
onKeyStroke('A', (e) => {console.log('Key A pressed on document')
}, { target: document })
  • 指令用法

vOnKeyStroke,冒号后面是监听的按键,等号后面是回调方法。

<script setup lang="ts">
import { vOnKeyStroke } from '@vueuse/components'
function onUpdate(e: KeyboardEvent) {// impl...
}
</script><template><input v-on-key-stroke:c,v="onUpdate" type="text"><!-- with options --><input v-on-key-stroke:c,v="[onUpdate, { eventName: 'keyup' }]" type="text">
</template>
  • 自定义键盘和简写
onKeyStroke('Shift', (e) => {console.log('Shift key up')
}, { eventName: 'keyup' })// 等价于
onKeyUp('Shift', () => console.log('Shift key up'))// 这样的简写有三个
onKeyDown --> onKeyStroke(key, handler, {eventName: 'keydown'})
onKeyPressed --> onKeyStroke(key, handler, {eventName: 'keypress'})
onKeyUp --> onKeyStroke(key, handler, {eventName: 'keyup'})

源码分析

export function onKeyStroke(...args: any[]) {let key: KeyFilterlet handler: (event: KeyboardEvent) => voidlet options: OnKeyStrokeOptions = {}/*** 1 根据参数的个数,区分`key、handler、options`*/if (args.length === 3) {key = args[0]handler = args[1]options = args[2]}else if (args.length === 2) {if (typeof args[1] === 'object') {key = truehandler = args[0]options = args[1]}else {key = args[0]handler = args[1]}}else {key = truehandler = args[0]}const { target = defaultWindow, eventName = 'keydown', passive = false } = optionsconst predicate = createKeyPredicate(key)const listener = (e: KeyboardEvent) => {/*** 3 当事件触发,检查这个事件e,在不在用户需要监控的范围内。如果在,触发handler回调*   predicate函数如下*/if (predicate(e))handler(e)}/*** 2 给window注册keydown事件的监听。如果触发,触发listener回调*/return useEventListener(target, eventName, listener, passive)
}
const createKeyPredicate = (keyFilter: KeyFilter): KeyPredicate => {// 1 用户自定义了检查的函数if (typeof keyFilter === 'function')return keyFilter// 2 用户传入了一个字符串,比如官方示例的'shift',则比较事件的key是不是等于'shift'else if (typeof keyFilter === 'string')return (event: KeyboardEvent) => event.key === keyFilter// 3 用户传入了数组['s', 'S', 'ArrowDown'],则看数组中有没有事件的keyelse if (Array.isArray(keyFilter))return (event: KeyboardEvent) => keyFilter.includes(event.key)// 4 用户传了true,或者不传,默认truereturn () => true
}

onKeyDown \ onKeyUp都是调用了onKeyStroke,写死了一个参数

export function onKeyDown(key: KeyFilter, handler: (event: KeyboardEvent) => void, options: Omit<OnKeyStrokeOptions, 'eventName'> = {}) {return onKeyStroke(key, handler, { ...options, eventName: 'keydown' })
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络安全:键盘记录器
  • 算法训练营|图论第8天 拓扑排序 dijkstra
  • (二十六)Java 数据结构
  • 山东省行政执法证照片要求及图像处理方法
  • 暑期学习总结
  • Android 11添加系统服务,并封装jar包供第三方应用使用
  • Kafka【五】Buffer Cache (缓冲区缓存)、Page Cache (页缓存)和零拷贝技术
  • python与pytroch相关
  • linux 下一跳缓存,early demux(‌早期解复用)‌介绍
  • 探索PDF的奥秘:pdfrw库的神奇之旅
  • 32 配置多路由的静态路由
  • https和harbor仓库跟k8s
  • VsCode + Go + macOS 小白 demo运行
  • 浏览器自动化测试的利器:Cypress
  • AI大模型实战:pytorch安装
  • 自己简单写的 事件订阅机制
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • java正则表式的使用
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Linux链接文件
  • nfs客户端进程变D,延伸linux的lock
  • Python - 闭包Closure
  • Python实现BT种子转化为磁力链接【实战】
  • webpack4 一点通
  • 模型微调
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 终端用户监控:真实用户监控还是模拟监控?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 阿里云服务器购买完整流程
  • 国内开源镜像站点
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​Redis 实现计数器和限速器的
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #stm32整理(一)flash读写
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (10)STL算法之搜索(二) 二分查找
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (二)c52学习之旅-简单了解单片机
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (篇九)MySQL常用内置函数
  • (十三)MipMap
  • (数据结构)顺序表的定义
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET Framework与.NET Framework SDK有什么不同?
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 发展历程
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET性能优化(文摘)