📄 keyhandler.js
字号:
////////////////////////////////////////////////////////////////////////////////
/**
*--------------- 键盘快捷键处理 -----------------
*
* 功能:设置键盘快捷操作
* 使用说明:可直接看keyhandler.html里面的示例
* 1.在页面结尾处引入此js文件.
*
* 2.在文档结尾部分设置键盘键函数.
*
* 3.单键处理:
* //向下方向键 keyCode为40
* document.body.addKeyDown(40, function(){
* //TODO 操作内容
* });
*
* 4.组合键处理:
* Alt、Shift、Ctrl组合别的键:
* //Ctrl+S S的keyCode为83
* document.body.addKeyDown(83, function(){
* if (window.event.ctrlKey){
* //TODO 操作内容
* }
* });
* 普通组合键有点麻烦,在现实中用的也比较少,keyhandler.html中有q+w的组合例子。
* 超过两个以上的键,目前尚未知如何处理。
*
* 5.此JS中默认提供了CTRL+S,CTRL+ENTER,ALT+ENTER,SHIFT+ENTER四个组合键
* 只需要实现具体的function:f_ctrl_s();f_ctrl_enter();f_alt_enter();f_shift_enter();
*
* 6.关于keyCode:所有的键盘键event都有对应的keyCode值,如S的keyCode为83,或者直接设置"S",系统自动获取keyCode值。
*
* 7.除上述可重载系统默认提供的几个快捷函数外,可调用keyDown()函数自定义快捷键。如
* //设置按“D”的快捷键
* keyDown("D",function(){
* //TODO 需要处理动作
* });
* //设置按“CTRL+D”的快捷键
* keyDown("D","CTRL",function(){
* //TODO 需要处理动作
* });
*
* @author yehailong 2006.01.18
*
*--------------- 键盘快捷键处理 -----------------
*/
///////////////////////////////////////////////////////////////////////////////////
function addKeyHandler(element) {
element._keyObject = new Array();
element._keyDisable = new Array();
//系统捕获键盘键的keydown、keyup、keypress等事件操作,采用关联数组的方式定义
element._keyObject["keydown"] = new Array();
element._keyObject["keyup"] = new Array();
element._keyObject["keypress"] = new Array();
element._keyDisable["keydown"] = new Array();
element._keyDisable["keyup"] = new Array();
element._keyDisable["keypress"] = new Array();
//增加快捷键
element.addKeyDown = function (keyCode, action) {
element._keyObject["keydown"][getKeyCode(keyCode)] = action;
}
//释放快捷键
element.removeKeyDown = function (keyCode) {
element._keyDisable["keydown"][getKeyCode(keyCode)] = true;
}
//恢复快捷键
element.restoreKeyDown = function (keyCode) {
if(element._keyObject["keydown"][getKeyCode(keyCode)]!=null){
element._keyDisable["keydown"][getKeyCode(keyCode)] = false;
}
}
element.addKeyUp = function (keyCode, action) {
element._keyObject["keyup"][keyCode] = action;
}
element.removeKeyUp = function (keyCode) {
element._keyDisable["keyup"][keyCode] = true;
}
element.restoreKeyUp = function (keyCode) {
if(element._keyObject["keyup"][keyCode]!=null){
element._keyDisable["keyup"][keyCode] = false;
}
}
element.addKeyPress = function (keyCode, action) {
element._keyObject["keypress"][keyCode] = action;
}
element.removeKeyPress = function (keyCode) {
element._keyDisable["keypress"][keyCode] = true;
}
element.restoreKeyPress = function (keyCode) {
if(element._keyObject["keypress"][keyCode]!=null){
element._keyDisable["keypress"][keyCode] = false;
}
}
//获取keyCode
function getKeyCode(keyCode){
//如果是数字
var temp = parseInt(keyCode);
if(!isNaN(temp)){
return temp;
}else{
keyCode = keyCode.toUpperCase();
return keyCode.charCodeAt(0);
}
}
function handleEvent() {
var type = window.event.type;
var code = window.event.keyCode;
if (element._keyObject[type][code] != null) {
try{
element._keyObject[type][code]();
}catch(e){
window.status = "快捷键定义错误:"+e;
}
}
}
element.onkeypress = handleEvent;
element.onkeydown = handleEvent;
element.onkeyup = handleEvent;
}
//页面加载完毕之后定义快捷键
function hotKey(){
//捕获键
addKeyHandler(document.body);
//----预先定义了一些快捷键操作,具体的实现函数需要在对应的页面中提供----------//
//Ctrl+S
document.body.addKeyDown("S", function(){
if (window.event.ctrlKey){
//TODO 需要提供具体的函数实现
f_ctrl_s();
window.event.returnValue = false;
}
});
function f_ctrl_s(){
var b = document.getElementById("s_button");
if(b!=null){
b.click();
}
}
//ENTER 键操作
//只要在具体页面中实现f_ctrl_enter()、f_alt_enter()、f_shift_enter()。
document.body.addKeyDown("\r", function(){
if (window.event.ctrlKey){
//TODO CTRL+ENTER
f_ctrl_enter();
}else if (window.event.altKey){
//TODO ALT+ENTER
f_alt_enter();
}else if (window.event.shiftKey){
//TODO SHIFT+ENTER
f_shift_enter();
}else{
var source = event.srcElement;
if(source.tagName == "INPUT" && (source.type =="button" || source.type=="submit")){
//提交
event.keyCode=32;
}else if(source.tagName !="TEXTAREA" ){
//TAB切换
event.keyCode = 9;
}
}
});
/**
* 自定义快捷键
* 如果是单快捷键,第一参数为键盘键的keyCode或键盘字符,第二个参数为功能函数.
* 如果是组合快捷键,第一参数为键盘键的keyCode或键盘字符,第二个参数为特殊键(CTRL,ALT,SHIFT),第三个参数为功能函数.
*/
function keyDown(){
var paramNum = keyDown.arguments.length;
if(paramNum!=2&¶mNum!=3){
alert("使用错误,传递两个或三个参数!");
}
var params = new Array(paramNum);
for(var i=0 ; i<paramNum;i++){
params[i] = keyDown.arguments[i];
}
if(paramNum==2){
document.body.addKeyDown(params[0], params[1]);
}else{
params[1] = params[1].toUpperCase();
var keys = "CTRL,ALT,SHIFT,";
if(keys.indexOf(params[1]+",")==-1){
alert("使用错误,第二个参数必须为【CTRL,ALT,SHIFT】之一!");
return false;
}
document.body.addKeyDown(params[0], function(){
if(params[1]=="CTRL"&&event.ctrlKey){
params[2]();
}
if(params[1]=="ALT"&&event.altKey){
params[2]();
}
if(params[1]=="SHIFT"&&event.shiftKey){
params[2]();
}
});
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -