```js import storejs from 'storejs' /** * 使用方法 * const keyboard = new FnKeyDown({}) 根据当前业务排除获取焦点后按钮继续监听 * keyboard.monitorCallback = (type, event) => {} type === 1 ? '按下' : '抬起' * const keyboard = new FnKeyDown({isMonitorKeyCode: false}) 单纯的监听按键 */ export class FnKeyDown { curKeyCode: string; monitorKeyCode: number; isMonitorKeyCode: boolean; isFocus: boolean; keydownEven: any; keyupEven: any; focusEven: any; blurEven: any; constructor ({ isMonitorKeyCode = true }: any) { // this.curKeyCode = '' // 是否开启监听 this.isMonitorKeyCode = isMonitorKeyCode // 是否获取焦点,排除按钮监听 this.isFocus = false // 默认监听空格键 this.monitorKeyCode = 32 // 按下回调 this.keydownEven = null // 抬起回调 this.keyupEven = null // 获取焦点回调 this.focusEven = null // 失去焦点回调 this.blurEven = null this.init() }

init () { this.removeEvent() this.monitorKeyCode = this.getKeyCode().keyCode this.keydownEven = (event: any) => { // 如果在输入状态就先按下,且不在监听情况下 if (this.isFocus && this.curKeyCode === '') return // 如果已经按下不许重复触发 if (this.curKeyCode === event.keyCode) { return } // 判断是否开启监听 if (this.isMonitorKeyCode) { if (event.keyCode !== this.monitorKeyCode) { return } } this.curKeyCode = event.keyCode this.monitorCallback(1, event) } this.keyupEven = (event: any) => { // 判断是否开启监听 if (this.isMonitorKeyCode) { if (event.keyCode !== this.monitorKeyCode) { return } } // 如果在输入状态就先不弹起 if (this.isFocus) return this.curKeyCode = '' this.monitorCallback(0, event) } document.addEventListener('keydown', this.keydownEven, false) document.addEventListener('keyup', this.keyupEven, false) // 是否获取焦点,方便在输入的时候排除按钮监听 if (this.isMonitorKeyCode) { this.focusEven = (event: any) => { if (this.isFocus) return this.isFocus = true } this.blurEven = (event: any) => { if (this.isFocus === false) return this.isFocus = false } document.addEventListener('focus', this.focusEven, true) document.addEventListener('blur', this.blurEven, true) } }

monitorCallback (type: number, event: any) { // console.log(type === 1 ? '按下' : '抬起') }

setKeyCode (res: { key: string; code: string; keyCode: number}) { storejs.set('FnPttKeyInfo', res) }

getKeyCode () { const fnPttKeyInfo = storejs.get('FnPttKeyInfo') || { key: ' ', code: 'Space', keyCode: 32 } return fnPttKeyInfo }

removeEvent () { this.keydownEven && document.removeEventListener('keydown', this.keydownEven) this.keyupEven && document.removeEventListener('keyup', this.keyupEven) this.focusEven && document.removeEventListener('focus', this.focusEven) this.blurEven && document.removeEventListener('blur', this.blurEven) } } ```

js监听按钮按下弹起相关推荐

  1. JS监听用户按下ESC

    JS监听用户按下ESC $(document).ready(function(){}).keydown(function (e) {if (e.which === 27){console.log('按 ...

  2. html js按钮事件监听,JS监听事件

    对象 - JS监听事件 ¶ 作者:KK 发表日期:2016.2.21 在准备讲解后面的window对象之前,这里将话题转回来事件这里 平时咱们在一个元素里加个onclick属性,属性值写JS代码,这样 ...

  3. linux输入数字切换浏览器tab,js监听浏览器tab窗口切换

    js监听浏览器tab窗口切换 --IT唐伯虎 摘要:js监听浏览器tab窗口切换. if (document.hidden !== undefined) { document.addEventList ...

  4. js 监听URL地址变化

    js 监听URL的hash变化 项目中使用AntdUI组件+react  里面使用了menu组件管理目录结构,不同目录组件页面之中有点击按钮进行不同目录的跳转,因为是各种组件的关系,点击各组件后准确跳 ...

  5. js监听鼠标拖动事件(按住左键拖动触发,松开左键取消)

    此段代码,实现了左键点击id元素内区域后,拖动鼠标到边缘区域滚动条(内部class元素的滚动条)自动滚动,松开鼠标后取消事件 业务需要记录一下 $(function () {var div=docum ...

  6. cubase教程分享:Cubase录音时如何自动激活监听按钮

    Cubase是一款功能全面且强大的音频处置工具,具有MIDI音序功用.音频编辑处置功用.多轨录音缩混功用.视频配乐以及环绕声处置功用,简直能满足用户的一切需求,并且最新版的Cubase着重提升了音质和 ...

  7. html 页面自动滚动,js监听html页面的上下滚动事件方法

    最近在一个项目中,在写前端页面的时候,想像以前做Android时在页面时刻监听上下滚动的事件,查找资料发现由鼠标或类似用户动作触发的事件有以下图示: 不多说了,直接上代码了,经过测试可以使用: Dom ...

  8. js监听页面或元素scroll事件,滚动到底部或顶部

    基本原理: 1.滚动到底部 元素的滚动距离 + 元素的可视距离 == 元素的滚动条总距离2.滚动到顶部 元素的滚动距离 == 0 监听页面滚动 <!DOCTYPE html> <ht ...

  9. java计算器监听放大缩小,js监听页面放大缩小

    demo body[zoom='scale']:before{ content: '您的网页处于缩放状态,请按 Ctrl+0 恢复到浏览器默认大小'; z-index: 9999; position: ...

最新文章

  1. 半导体量子芯片开发获重要进展
  2. python中参数的位置传递和名称传递各有什么优缺点_Python开发TCP和UDP的区别是什么?优缺点对比总结...
  3. 两种写法的效果一样,那么到底哪一种更好呢?
  4. No module named 'StringIO'
  5. OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字
  6. 骁龙660是32位还是64位_高通发布骁龙 7c/8c 芯片,以后你可能会在电脑上看到它...
  7. Confluence 6 用户目录图例 - 使用 LDAP 授权,在用户第一次登陆时拷贝用户
  8. JDK源码解析--ArrayList
  9. 三菱gt3的序列号_WinXP sp3序列号大全
  10. edius隐藏快捷键_EDIUS 常用快捷键
  11. R2V软件自动矢量化----体验篇
  12. android隐藏root环境,Android安全检查之Root环境检测
  13. 常见文件文件头文件尾格式总结及各类文件头
  14. 【高等数学笔记】格林公式、高斯公式、斯托克斯公式、场论
  15. PDF文件密码怎么解除
  16. win10装win7进入不了bios的解决方法
  17. 台式电脑有哪些零件组成 台式电脑主件的形象解释
  18. 傅小兰研究员是学报第一任女主编吗?
  19. python123测验答案第十周_智慧职教mooc的APPPython程序设计(常州工业职业技术学院)章节测验答案...
  20. 计算机磁盘图标变成软件的了,电脑的本地磁盘图标变成一个U盘形状图标了怎么回事?如何解决?...

热门文章

  1. 照葫芦画瓢之python爬虫系列----(2)初次爬取简单的动态网页数据(网易、QQ音乐排行榜)
  2. 给某汉化联盟讲些历史故事
  3. 【作品分享】一次函数计算器
  4. Filter Solutions 10.0+破解
  5. 通过USB VID和PID卸载USB设备
  6. 如何获取UEFI开源资源?
  7. BigDecimal 进行四舍五入 四舍六入和保留两位小数,三位四位小数
  8. 将文本文件导入到mysql,hive数据库中
  9. android——(图片框与进度条)
  10. 操作系统原理实验-进程同步