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

JS监听组合按键

本文转自:https://www.cnblogs.com/xiaoheimiaoer/p/4716191.html 。

有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制、粘贴等等。

下面简单梳理一下思路:

我们所熟悉的按键有这么集中类型:

  • 单独的按键操作,如:deleteupdown
  • 两位组合建,如:ctrl(cmd)+ 其他按键,alt+其他按键,shift+其他按键
  • 三位组合键,如:ctrl(cmd)+ shift + 其他按键,Ctrl(cmd)+ alt + 其他按键

大概只有这么几种情况了,至少我没有见过其他的情况。如果确实存在的话,基本实现的原理也比较类似,本文就不再赘述了。

上面这三种情况, 都要处理的一个关键问题是阻止默认行为:比如删除按键,保存网页按键,保存书签等等,这些网页上的默认行为都需要阻止掉。另外一个就是监听按键,然后根据自己的需求,处理相应的事件。

基于上面提到的需要做的两件事,我们结合代码详细理解一下。

我们写一个简单的例子:

document.onkeydown = function(event) {console.log(event);
}

这个页面,在我们按键的时候会执行这个方法,以a按键为例,会打印一下结果:

打印a按键

这个事件有很多的属性和方法,这里我们不会一一进行说明,只是挑出来我们比较感兴趣的几个进行说明。

对照上面提到需要处理的两件事:

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

第二监听按键类型,按键分两种情况,一种是单独按键(只有一个键),一种是组合键(两个以上按键)。单独按键需要监听事件的keyCodecharCodewhich属性。

这张表介绍的比较详细,出自《JavaScript Madness不同的浏览器的keycode比较》

JavaScript Madness不同的浏览器的keycode比较

当然使用了jQuery也不用担心兼容问题了,直接使用event.keyCode即可。那怎么知道用户使用了组合键呢?

我们看到事件还有这么几个属性:ctrlKeymetaKey)、altKeyshiftKey,当你同时按下组合键的时候,这几个属性会变成true,所以组合键就可以通过监听按键code和这几个属性的状态进行判断了。

举一个简单的例子,监听ctrlcmd)+ s事件:

document.onkeydown = function(event) {var keyCode = event.keyCode || event.which || event.charCode;var ctrlKey = event.ctrlKey || event.metaKey;if(ctrlKey && keyCode == 83) {event.preventDefault();alert('save');}// event.preventDefault(); // 注意:阻止默认事件不能放在外面,会阻止浏览器或者input/textarea的默认事件,应该放在相应的按键组合中去阻止return false;
}

JS监听组合按键的原理基本上就是这个样子了。

当然GitHub上面也有封装好的插件shortcuts.js官网 ,还有一个jquery版本的,github地址。

shortcuts.js支持单独按键和组合按键,同时可以通过配置是组合按键在输入框内失效。

它的使用方式是:

shortcut("[",function() {alert("Hi there!");
}, {'type':'keydown', //事件'propagate':false, //是否支持冒泡'disable_in_input':true, //是否在输入框内有效'target':document, //作用范围
});
http://www.xdnf.cn/news/11691.html

相关文章:

  • 星空极速 加密算法(附本人C语言源代码)
  • 有关ARP
  • Filezilla使用
  • elasticsearch最大节点数_10分钟快速入门海量数据搜索引擎Elasticsearch
  • WINDOWSXP主题风格美化教程
  • 计算机毕业设计 jsp房屋租赁系统(jsp+servlet+sqlserver) 毕设
  • 【全网最全】100款七夕节情人节表白网页制作HTML+CSS+JS
  • 简单说说U-boot的修改
  • 进程名称
  • 各大浏览器内核介绍
  • 一些IT段子,娱乐一下
  • 七款开源ERP评估比较
  • C++句柄类
  • 从CM刷机过程和原理分析Android系统结构
  • flash模块开发
  • Windows服务器创建定时任务
  • 在 Java 应用程序中访问USB设备-Java基础-Java-编程开发
  • [紧急通告]关于蓝色理想经典论坛无法访问的声明
  • ch8_2_CPU的指令周期,流水线技术
  • 大富豪3(GM商城版)新手攻略之购买土地
  • 分享60个ASP精品程序源码,总有一款适合您
  • 常见邮件服务器(接收服务器和发送邮件服务器)地址
  • PostgreSQL的B-tree索引
  • NC 54585 DP + BIT
  • 破解隔壁wifi的实践——网络攻击,抓取握手包,解包
  • .net发送邮件失败的部分解决方法
  • 【网络管理工具】NETworkManager工具的基本使用教程
  • C#(asp.net)电商后台管理系统-计算机毕业设计源码70015
  • AI技术:分享8个非常实用的AI绘画网站
  • Oracle minus用法详解及应用实例