• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > javascript 组合按键事件监听实现代码

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了javascript按键事件,javascript 模拟按键,javascript 按键,javascript事件,javascript鼠标事件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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>
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JavaScript实现按键精灵的原理分析
  • javascript 组合按键事件监听实现代码

相关文章

  • 2017-05-11javascript 中设置window.location.href跳转无效问题解决办法
  • 2017-09-11JS中对象的循环删除
  • 2017-05-11浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
  • 2017-05-11jquery实现异步加载图片(懒加载图片一种方式)
  • 2017-05-11JS字符串按逗号和回车分隔的方法
  • 2017-05-11详解本地Node.js服务器作为api服务器的解决办法
  • 2017-05-11canvas仿iwatch时钟效果
  • 2017-05-11jQuery实现动态文字搜索功能
  • 2017-05-11js实现横向拖拽导航条功能
  • 2017-05-11ionic+AngularJs实现获取验证码倒计时按钮

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • JS表格组件神器bootstrap table使用指南详解
    • 详解微信小程序开发之——wx.showToast(OBJECT)的使用
    • javascript数组去重常用方法实例分析
    • 用move.js库实现百叶窗特效
    • jQuery实现联动下拉列表查询框
    • jQuery实现图片滑动效果
    • javascript过滤数组重复元素的实现方法
    • ES7之async/await异步方案
    • JavaScript编写九九乘法表(两种任选)
    • jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有