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

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>

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

(0)

相关推荐

  • javascript中onclick(this)用法介绍

    this指触发事件的对象 复制代码 代码如下: <input id="myinput" type="text" value="javascript中onclick中的this" onclick="javascript:test(this);"/> 复制代码 代码如下: function test(obj){ alert(obj); //[object HTMLInputElement] alert(obj.id);

  • eval(function(p,a,c,k,e,d)系列解密javascript程序

    步骤:1.新建html页面,把以下代码考进去,运行. 2.把加密的代码粘进文本域,点击解密,OK! 核心代码: 复制代码 代码如下: <script> a=62; function encode() { var code = document.getElementById('code').value; code = code.replace(/[\r\n]+/g, ''); code = code.replace(/'/g, "\\'"); var tmp = code.m

  • JavaScript调试技巧之console.log()详解

    一.什么是console.log()?除了一些很老版本的浏览器,现今大多数浏览器都自带调试功能:即使没有调试功能,也可以通过安装插件来进行补充.比如,老版本的Firefox没有自带调试工具,在这种情况下可以通过安装Firebug插件来添加调试功能.在具备调试功能的浏览器上,window对象中会注册一个名为console的成员变量,指代调试工具中的控制台.通过调用该console对象的log()函数,可以在控制台中打印信息.比如,以下代码将在控制台中打印"Sample log": 复制代

  • javascript getElementById 使用方法及用法

    document.getElementById("link").href; document.getElementById("link").target; document.getElementById("img").src; document.getElementById("img").width; document.getElementById("img").height; document.getEl

  • JavaScript 监听textarea中按键事件

    有个textarea, Java代码 复制代码 代码如下: <textarea id="text"></textarea> 经常会定义onKeyPress="keypress();",并定义以下方法. 复制代码 代码如下: var keypress = function(e){ var e = e || window.event; var k = e.keyCode; } 这里我使用的办法是JQuery. 复制代码 代码如下: $("

  • JavaScript 获取当前时间戳的代码

    JavaScript 获取当前时间戳: 第一种方法: 复制代码 代码如下: var timestamp = Date.parse(new Date()); 结果:1280977330000 第二种方法: 复制代码 代码如下: var timestamp = (new Date()).valueOf(); 结果:1280977330748 以上代码将获取从 1970年1月1日午夜开始的毫秒数.二者的区别是,第一种方法的毫秒位上为全零,即只是精确到秒的毫秒数 如题所示,返回unix时间戳所对应的具体

  • javascript if条件判断方法小结

    条件语句用于基于不同的条件来执行不同的动作. 条件语句 通常在写代码时,您总是需要为不同的决定来执行不同的动作.您可以在代码中使用条件语句来完成该任务. 在 JavaScript 中,我们可使用以下条件语句: •if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码•if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码•if...else if....else 语句 - 使用该语句来选择多个代码块之一来执行•switch 语句 - 使用

  • javascript jQuery $.post $.ajax用法

    jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示. callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法). type (String) : (可选)官方的说明是:Type o

  • JavaScript中json对象和string对象之间相互转化

    json对象 复制代码 代码如下: var json = {aa:true,bb:true}; var json1 = {aa:'b',bb:{cc:true,dd:true}}; 1:js操作json对象 复制代码 代码如下: for(var item in json){ alert(item); //结果是 aa,bb, 类型是 string alert(typeof(item)); alert(eval("json."+item)); //结果是true,true类型是boole

  • 基于JavaScript 声明全局变量的三种方式详解

    JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量.该方式即为显式声明详细如下: <script> var test = 5;//全局变量 function a(){ var a = 3;//局部变量 alert(a); } function b(){ alert(test); } //a();//调用a方法,那么方法里面的内容才会执行 //b(

随机推荐