js客户端快捷键管理类的较完整实现和应用
2023-06-13 09:14:19 时间
//一个快捷键对象
functionKeyOne(id,keys,dom,isfun,fun,iskeydown){
this.id=id;
this.keys=keys;
this.dom=dom;
this.isfun=isfun;
this.fun=fun;
this.isKeydown=iskeydown;
}
//快捷键管理类
varKeyConlor={};
KeyConlor.list=newArray();
//添加一个快捷键绑定焦点(当快捷键被激发时让焦点落在指定id对象上)
//使用说明key的值如果是“c,50”则表示“ctrl”和键码为50的组合键
//"a,50"则表示“alt”和键码为50的组合键
//"s,50"则表示“shift”和键码为50的组合键
//"50"则表示键码为50的单键(建议使用组合键alt)
//id指的是快捷键对应的焦点对象。
//dom指的是id对象所在的document对象
KeyConlor.addkeyfouse=function(id,key,dom,iskyedown){
varkeyone=newKeyOne(id,key,dom,false,null,iskyedown);
if(KeyConlor.KeyIsOK(keyone)){
KeyConlor.list.push(keyone);
}else{
alert("快捷键"+keyone.keys+"已经被注册不能重复注册了");
returnfalse;
}
};
//快捷键绑定方法(当快捷键激发时触发方法)
KeyConlor.addkeyfun=function(key,fun,iskeydown){
varkeyone=newKeyOne("",key,"",true,fun,iskeydown);
if(KeyConlor.KeyIsOK(keyone)){
KeyConlor.list.push(keyone)
}else{
alert("快捷键:"+keyone.keys+";已经被注册.重复注册无效");
returnfalse;
}
};
//--删除一个快捷键
//KeyConlor.removeFouseKey=function(id){
//varkeyone=newKeyOne(id,"");
//for(vari=0;i<KeyConlor.list.length;i++){
//if(keyone.id==KeyConlor.list[i].id){
//KeyConlor.list[i]=null;
//}
//}
//};
//--判断快捷键是不是重复注册
KeyConlor.KeyIsOK=function(keyone){
for(vari=0;i<KeyConlor.list.length;i++){
if(KeyConlor.list[i].keys==keyone.keys){
returnfalse;
}
}
returntrue;
};
document.onkeydown=function(){
for(vari=0;i<KeyConlor.list.length;i++){
varkeyone=KeyConlor.list[i];
if(!keyone.isKeydown)continue;
varcontrol=keyone.keys.split(",")[0];
switch(control){
case"s":
varcode=keyone.keys.split(",").length>1?keyone.keys.split(",")[1]:keyone.keys.split(",")[0];
if(event.shiftKey==true&&event.keyCode==code){
//获得焦点
if(!keyone.isfun){
keyone.dom.getElementById(keyone.id).focus();
}else{
keyone.fun();
}
event.keyCode=0;
returnfalse;
}
break;
case"c":
varcode=keyone.keys.split(",").length>1?keyone.keys.split(",")[1]:keyone.keys.split(",")[0];
if(event.ctrlKey==true&&event.keyCode==code){
//获得焦点
if(!keyone.isfun){
keyone.dom.getElementById(keyone.id).focus();
}else{
keyone.fun();
}
event.keyCode=0;
returnfalse;
}
break;
case"a":
varcode=keyone.keys.split(",").length>1?keyone.keys.split(",")[1]:keyone.keys.split(",")[0];
if(event.altKey==true&&event.keyCode==code){
//获得焦点
if(!keyone.isfun){
keyone.dom.getElementById(keyone.id).focus();
}else{
keyone.fun();
}
event.keyCode=0;
returnfalse;
}
event.keyCode=0;
break;
default:
//获得焦点
varcode=keyone.keys.split(",").length>1?keyone.keys.split(",")[1]:keyone.keys.split(",")[0];
if(event.keyCode==code&&event.altKey==false&&event.ctrlKey==false&&event.shiftKey==false){
if(!keyone.isfun){
keyone.dom.getElementById(keyone.id).focus();
}else{
keyone.fun();
}
event.keyCode=0;
returnfalse;
}
break;
}
}
};
document.onkeyup=function(){
for(vari=0;i<KeyConlor.list.length;i++){
varkeyone=KeyConlor.list[i];
if(keyone.isKeydown)continue;
varcontrol=keyone.keys.split(",")[0];
switch(control){
case"s":
varcode=keyone.keys.split(",").length>1?keyone.keys.split(",")[1]:keyone.keys.split(",")[0];
if(event.shiftKey==true&&event.keyCode==code){
//获得焦点
if(!keyone.isfun){
keyone.dom.getElementById(keyone.id).focus();
}else{
keyone.fun();
}
event.keyCode=0;
returnfalse;
}
break;
case"c":
varcode=keyone.keys.split(",").length>1?keyone.keys.split(",")[1]:keyone.keys.split(",")[0];
if(event.ctrlKey==true&&event.keyCode==code){
//获得焦点
if(!keyone.isfun){
keyone.dom.getElementById(keyone.id).focus();
}else{
keyone.fun();
}
event.keyCode=0;
returnfalse;
}
break;
case"a":
varcode=keyone.keys.split(",").length>1?keyone.keys.split(",")[1]:keyone.keys.split(",")[0];
if(event.altKey==true&&event.keyCode==code){
//获得焦点
if(!keyone.isfun){
keyone.dom.getElementById(keyone.id).focus();
}else{
keyone.fun();
}
event.keyCode=0;
returnfalse;
}
break;
default:
//获得焦点
varcode=keyone.keys.split(",").length>1?keyone.keys.split(",")[1]:keyone.keys.split(",")[0];
if(event.keyCode==code&&event.altKey==false&&event.ctrlKey==false&&event.shiftKey==false){
if(!keyone.isfun){
keyone.dom.getElementById(keyone.id).focus();
}else{
keyone.fun();
}
event.keyCode=0;
returnfalse;
}
break;
}
}
};
//常用键盘码
varkeyCodeStr={
Alt:"a",
Shift:"s",
Ctrl:"c",
Up:"38",
Down:"40",
Left:"37",
Right:"39",
Esc:"27",
Enter:"13",
Backspace:"8",
Delete:"46",
Tab:"9",
CapsLK:"20",
Space:"32"
};
[code]
----------以上是js类-------------------------------
[code]
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title></title>
<scriptsrc="KyeControl.js"type="text/javascript"></script>
<scripttype="text/javascript">
KeyConlor.addkeyfun(keyCodeStr.Ctrl+","+"70",function(){alert("哈哈");},true);
KeyConlor.addkeyfouse("2","65",document,true);
</script>
</head>
<body>
<formid="form1">
<div>
<inputtype="text"id="2"/>
<inputtype="text"id="3"/>
<inputtype="text"id="4"/>
<inputtype="text"id="5"/>
</div>
</form>
</body>
</html>
相关文章
- Fabric.js 拖拽平移画布
- js面试题及答案2020_JS面试题大全
- 『Three.js』场景 Scene
- web前端node.js常用命令
- js判断map是否为空
- js中高级部分知识点总结第二篇
- 用JS获取地址栏url参数的方法_js的url是啥
- 【说站】js try/catch语句如何使用
- WordPress增加说说功能—Artitalk.js应用
- JS防抖与节流(类比游戏技能)
- JS常见问题总结
- 自定义事件在 Vue.js 组件中的应用
- 原生 JS 实现 HTML 转 Markdown,以及其实现逻辑(html2md.js 或 html2markdown.js)
- 如何使用jscythe并通过Node.js的Inspector机制执行任意JS代码
- JS获取浏览器信息详解编程语言
- JS的应用场景
- JS元素属性的获取和设置
- Node.js与MongoDB:联手打造高效应用(node与mongodb)
- 使用JS实现Redis数据读取(js读取redis)
- JS实时链接Oracle让数据库访问更便捷(js实时连接oracle)
- 用js自动判断浏览器分辨率的代码
- 感觉很流畅的js实现的键盘控制(带惯性)
- 通用JS事件写法实现代码
- Js检查变量类型的代码()
- js实现双向链表互联网机顶盒实战应用实现
- Package.js现代化的JavaScript项目make工具
- js实现翻页后保持checkbox选中状态的实现方法
- window.addEventListener来解决让一个js事件执行多个函数
- js中eval()函数和trim()去掉字符串左右空格应用
- js触发asp.net的Button的Onclick事件应用
- js按指定格式显示日期时间的样式代码
- js获取判断上传文件后缀名的示例代码