⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyhandler.js

📁 管理公司合同
💻 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&&paramNum!=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 + -