javascript 组合按键事件监听实现代码


Posted in Javascript onFebruary 21, 2017

javascript 组合按键事件监听实现代码

JS组合按键事件监听,支持同时监听多组按键如{a,b,c,}{ctrl,c}。

实例代码:

<script type="text/javascript"> 
   (function(){ 
    /** 
    *dqKeys v1.0.0 | (c) 2016 www.findme.wang 
    *@params json keys 监听的按键 
    *@params bool isOrder 按键是否有相应的顺序 
    *@params Function sucFuc 完成按键的回调函数 
    *@params Function cancelFuc 完成按键取消后的回调函数 
    *@author lidequan 
    */ 
    var dqKeys = function(keys,isOrder,sucFuc,cancelFuc) { 
      // 函数体 
      return new dqKeys.fn.init(keys,isOrder,sucFuc,cancelFuc); 
    } 
    dqKeys.fn = dqKeys.prototype = { 
      'version':'1.0.0',  //版本号 
      'author':'lidequan', //作者 
      'rightKeys':{},   //监听的按键{key:code},code为按键对应的ascii码  
      'curKeys':[],    //当前按下的键 
      'sucFuc':null,    //完成按键的回调函数 
      'cancelFuc':null,  //完成按键取消后的回调函数 
      'isFinsh':false,  //判断是否完成按键 
      'isOrder':false,  //按键是否有相应的顺序 
      init:function(keys,isOrder,sucFuc,cancelFuc){ 
        this.rightKeys=keys; 
        this.sucFuc=sucFuc; 
        this.cancelFuc=cancelFuc; 
        this.isOrder=isOrder; 
          
        return this; 
      }, 
      listenkeys:function(){//监听用户键盘操作         
        var _self=this; 
        _self.addListener('keydown', function(oEvent){ 
          var oEvent =oEvent || window.event; 
          if(!_self.arrayContain(_self.curKeys,oEvent.keyCode)){ 
            if(_self.isOrder && _self.getNextKey() == oEvent.keyCode){ 
              _self.curKeys.push(oEvent.keyCode); 
            }else if(!_self.isOrder){ 
              _self.curKeys.push(oEvent.keyCode); 
            } 
          } 
          if(_self.checkResult(_self.rightKeys,_self.curKeys)){ 
            if(_self.sucFuc && !_self.isFinsh){ 
              _self.sucFuc(); 
            } 
            _self.isFinsh=true; 
          } 
        }); 
        _self.addListener('keyup', function(oEvent){ 
          var oEvent =oEvent || window.event;          
          if(_self.checkResult(_self.rightKeys,_self.curKeys) && _self.isFinsh){    
            //完成按键,又取消的事件 
            if(_self.cancelFuc){ 
              _self.cancelFuc(); 
            } 
          } 
  
          _self.curKey=_self.remove(_self.curKeys,oEvent.keyCode); 
          _self.isFinsh=false; 
        }); 
      }, 
      arrayContain:function(arr,val){//判断数组中是否包含某个元素 
          return (arr.indexOf(val) == -1) ? false:true; 
      }, 
      checkResult:function(json,arr){ //判断用户是否按下监听的所有按键 
        for(var i in json){ 
           if(arr.indexOf(json[i])==-1){ 
             return false; 
           } 
         } 
        return true; 
      }, 
      remove:function(arr,val) { //从数组中移除某个元素       
        var index = arr.indexOf(val);  
        if (index > -1) {  
          arr.splice(index, 1);  
        }  
        return arr; 
      }, 
      getNextKey:function(){ //获取下一次按键对应的ascii码 
        for(var i in this.rightKeys){ 
          if(this.curKeys.indexOf(this.rightKeys[i])==-1){ 
             return this.rightKeys[i]; 
           } 
        } 
        return null; 
      }, 
      addListener:function(ev,fn,bool){ //事件绑定 
        if (document.attachEvent) {  
          document.attachEvent('on' + ev, fn);  
        }else{   
          document.addEventListener(ev,fn,bool);  
        }  
      } 
  
    } 
    dqKeys.fn.init.prototype = dqKeys.fn; 
    window.dqKeys = window.$$= dqKeys; 
   })(); 
  
  //1.测试 
  dqKeys({'a':65,'b':66},true,function(){ 
                  console.log('okey'); 
                },function(){ 
                  console.log('cancel'); 
                }).listenkeys(); 
  
  //2.测试 
  var dqKeys=new $$({'c':67,'d':68},false,function(){ 
                  console.log('keys down '); 
                },function(){ 
                  console.log('keys cancel'); 
                }); 
  dqKeys.listenkeys(); 
  </script>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jQuery创建插件的代码分析
Apr 14 Javascript
页面定时刷新(1秒刷新一次)
Nov 22 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
Mar 25 Javascript
一系列Bootstrap导航条使用方法分享
Apr 29 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
jquery动态添加文本并获取值的方法
Oct 12 Javascript
vue图片加载与显示默认图片实例代码
Mar 16 Javascript
在vscode里使用.vue代码模板的方法
Apr 28 Javascript
在移动端使用vue-router和keep-alive的方法示例
Dec 02 Javascript
js实现全选反选不选功能代码详解
Apr 24 Javascript
vue中的v-if和v-show的区别详解
Sep 01 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
Sep 22 Javascript
简单谈谈gulp-changed插件
Feb 21 #Javascript
从零学习node.js之搭建http服务器(二)
Feb 21 #Javascript
jQuery动态生成不规则表格(前后端)
Feb 21 #Javascript
jquery设置css样式的多种方法(总结)
Feb 21 #Javascript
JavaScript中 this 指向问题深度解析
Feb 21 #Javascript
js return返回多个值,通过对象的属性访问方法
Feb 21 #Javascript
从零学习node.js之模块规范(一)
Feb 21 #Javascript
You might like
UCenter 批量添加用户的php代码
2012/07/17 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
javascript每日必学之封装
2016/02/23 Javascript
浅谈js的异步执行
2016/10/18 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
安装Python的教程-Windows
2017/07/22 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
小学教师国培感言
2014/02/08 职场文书
升旗仪式主持词
2014/03/19 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
公务员考察材料范文
2014/12/23 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
雷锋的故事观后感
2015/06/10 职场文书