JS监听组合按键思路及实现过程


Posted in Javascript onApril 17, 2020

前言

我们经常用到组合键,例如alt+f4,crtl+enter。在开发中也会有这种需求。

组合键类型

单独组合,二键组合,三键组合

思路

1、获取键盘上的按键

2、阻止浏览器上的默认行为

3、执行自定义的js函数

代码例子

document.onkeydown = function(e) {
      var keyCode = e.keyCode || e.which || e.charCode;
      var altKey = e.altKey ;
      if(altKey && keyCode == 112) {
        alert("组合键成功")
      }
      e.preventDefault();
      return false;
    }

解刨

e.keyCode || e.which || e.charCode

谷歌浏览器对event.keyCode,event.charCode和event.which都兼容。

火狐浏览器对event.keyCode部分键值有效,如上下左右键(37,38,39,40),enter键(13),PgUp(33),PgDn(34)等部分有效,对数字键,字母键无效。

event.which也是部分键值有效,如字母键,数字键,enter键,Backspace键等有效,对上下左右键,PgUp(33),PgDn(34)键无效。

event.charCode也是对部分键值有效,如字母键,数字键,,Backspace键等有效,对enter键,上下左右键,PgUp(33),PgDn(34)键无效。

ie浏览器中,IE8及以下浏览器对event.charCode无效,event.keyCode和event.which对大部分键值能获得,但是有少部分也不能获得。

所以该写法为兼容写法。

e.altKey,e.shiftKey,e.ctrlKey,e.metaKey

用来监听键盘上的alt,shift,ctrl,meta键。当按下这些键的时候,值会变为true。

e.preventDefault()

阻止默认事件,在W3C标准和IE下,处理方式不太一致。分别是执行e.preventDefault()方法和将e.returnValue = false属性。当然如果你使用的jquery等类库的话,只需要写一个e.preventDefault()就可以了,它帮你做到了兼容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
Jul 27 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
Aug 17 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
Jul 25 jQuery
JS实现点击拉拽轮播图pc端移动端适配
Sep 05 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
Sep 27 Javascript
创建echart多个联动的示例代码
Nov 23 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
详解服务端预渲染之Nuxt(介绍篇)
Apr 07 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
May 12 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 Javascript
javascript canvas检测小球碰撞
Apr 17 #Javascript
Vue实现浏览器打印功能的代码
Apr 17 #Javascript
基于JavaScript获取url参数2种方法
Apr 17 #Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 17 #Javascript
vue fetch中的.then()的正确使用方法
Apr 17 #Javascript
如何基于filter实现网站整体变灰功能
Apr 17 #Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
Apr 17 #Javascript
You might like
用php过滤危险html代码的函数
2008/07/22 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
PHP安全性漫谈
2012/06/28 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
详解Python中列表和元祖的使用方法
2015/04/25 Python
Python解惑之整数比较详解
2017/04/24 Python
python中reload(module)的用法示例详解
2017/09/15 Python
python如何将两个txt文件内容合并
2019/10/18 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
CAD制图人员的自荐信
2014/02/07 职场文书
初三新学期计划书
2014/05/03 职场文书
公司租房协议书
2014/10/14 职场文书
2014年租房协议书范本
2014/10/30 职场文书
公司开业主持词
2015/07/02 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL