• js组合键监听


    对我而言最重要的

    获取keyCode代码后,我要把它赋值给一个全局变量,然后再使用,该事件结束后再置为0;

    因为我无法一直点击,一直判断他是否按下或者弹起

    方式一;是的发送到

    1. document.onkeydown = function (oEvent) {
    2. console.log(oEvent);
    3. }
    4. document.onkeydown = functionb(oEvent) {
    5. var oEvent = oEvent || window.oEvent;
    6. //获取键盘的keyCode值
    7. var nKeyCode = oEvent.keyCode || oEvent.which || oEvent.charCode;
    8. //获取ctrl 键对应的事件属性
    9. var bCtrlKeyCode = oEvent.ctrlKey || oEvent.metaKey;
    10. if( oEvent.nKeyCode == 83 && bCtrlKeyCode ) {
    11. alert('save');
    12. //doSomeThing...
    13. }
    14. }

    方式二:

    onKeyDown(event) { const keyCode = event.keyCode || event.which || event.charCode; // 有些浏览器除了通过keyCode获取输入键code,还可以通过which,charCode获取,这么写是出于浏览器兼容性考虑 const keyCombination = event.ctrlKey ; if (keyCombination && keyCode == 75) { console.log("按下了Ctrl + k键"); } }

     

    方式三

    document.onkeydown = function(event) {
        var keyCode = event.keyCode || event.which || event.charCode;
        var ctrlKey = event.ctrlKey || event.metaKey;
        if(ctrlKey && keyCode == 83) {
            event.preventDefault();
            alert('save');
        }
        // event.preventDefault(); // 注意:阻止默认事件不能放在外面,会阻止浏览器或者input/textarea的默认事件,应该放在相应的按键组合中去阻止
        return false;

     方式四

    普通两键或三键改如何判断呢

    我的思路是:在指定时间内(比如300ms),如果按了某键,就将改键的key存入指定对象上。如果超时或者已经触发了,就将保存的对象还原。
    然后判断对象上是否同时存在我们要监听的按键即可。

        // 普通两键示例
        let firstTime = 0
        let doubleEvent = {}
        document.addEventListener('keyup',(e)=>{
          let currentTime = Date.now()
          if(firstTime===0){
            firstTime =  currentTime
            doubleEvent[e.key] = true
          }else if(currentTime-firstTime>300){//超过300ms
            firstTime = 0
            doubleEvent = {}
          }else{
            doubleEvent[e.key] = true
          }
          if(doubleEvent.b&&doubleEvent.c){
            console.log('b+c');
            doubleEvent = {}
            firstTime = 0
          }
        })
     

  • 相关阅读:
    RocketMQ 5.0 vs 4.9.X 图解架构对比
    Vue常见面试题 - 01
    Vue | Vue.js 实现过渡动画
    第3.5章:StarRocks数据导入——Broker Load
    使用vue-cli搭建SPA项目
    论文-分布式-并发控制-Lamport逻辑时钟
    vue 简介 (MVVM介绍,超详细)
    LCA几种算法
    优思学院|“防呆”的英文是哪个才对?- CLMP
    linux命令与makefile学习
  • 原文地址:https://blog.csdn.net/dancria/article/details/126271397