美文网首页
监听键盘按键方法

监听键盘按键方法

作者: 幻之国2012 | 来源:发表于2024-01-15 11:13 被阅读0次

    背景:

    使用一些快捷按键来触发页面的一些功能按钮点击事件
    ( 以下示例: VUE 项目 )

    封装方法:

    键盘监听方法

    export const KeyBoardStart = ({
      KeyAry = [],
      preventDefault = false
    }) => {
      document.onkeydown = function(event) {
        preventDefault && event.preventDefault();
        if (KeyAry.length) {
          // 获取按键触发得到的相关数据
          const {
            key:_key,
            code:_code,
            keyCode:_keyCode,
            altKey:_altKey,
            shiftKey:_shiftKey,
            ctrlKey:_ctrlKey,
            metaKey:_metaKey
          } = event
    
          KeyAry.map((item) => {
            if ((item.key && item.key.length > 0 && item.key.indexOf(_key) !== -1) ||
                (item.code && item.code.length > 0 && item.code.indexOf(_code) !== -1) ||
                (item.keyCode && item.keyCode.length > 0 && item.keyCode.indexOf(_keyCode) !== -1)) {
    
              let _alt = false, _shift = false, _ctrl = false, _meta = false;
              if ('assist' in item) {
                const _assist = item.assist
                _alt = Boolean(_assist.indexOf('alt') !== -1)
                _shift = Boolean(_assist.indexOf('shift') !== -1)
                _ctrl = Boolean(_assist.indexOf('ctrl') !== -1)
                _meta = Boolean(_assist.indexOf('meta') !== -1)
              }
    
              if ((_alt === _altKey) && (_shift === _shiftKey) && (_ctrl === _ctrlKey) && (_meta === _metaKey)) {
                item.callback && item.callback()
              }
            }
          })
        }
      }
    }
    

    调用方法 及 说明

    /**
      KeyAry: [{              // key:[]  code:[]  keyCode:[]  三选一填写即可
        key: [],              // 按键的 key;
        code: [],             // 标识按下的具体是哪个物理键,键盘上每一个按键都对应一个唯一的值
        keyCode: [],          // 按键的键码值
        assist: [],           // 辅助按键值(例如:alt ctrl meta shift), 不需要辅助键则无需填写, 辅助键数组内的值是 and 关系;
        callback: ()=>{},     // 回调方法
      }, {}, ...],
      preventDefault: false,  // 是否阻止浏览器按键默认事件, 默认不阻止; 例如: 设置为 true; 则按下 ctrl + S 不会触发浏览器保存页面事件
    */
    
    // 调用键盘监听, 可以同时设置多个键 或者 组合键 监听
    KeyBoardStart({
      KeyAry: [
        // 监听回车按键
        { key: ['Enter'], callback: () => callBackFunctionName() },
        // 监听 ctrl + A(a)  组合按键
        { keyCode: [65], assist:['ctrl'], callback: () => callBackFunctionName() }
      ]
    })
    
    1. !!!如果页面调用了键盘按键监听, 页面销毁前 需要调用 关闭监听的方法!!!
    2. assist 辅助按键值(例如:alt ctrl meta shift), 不需要辅助键则无需填写, 辅助键数组内的值是 and 关系

    销毁键盘监听

    export const KeyBoardEnd = () => {
      document.onkeydown = null
    }
    

    销毁键盘监听调用方法
    beforeDestroy() { KeyBoardEnd() }

    相关文章

      网友评论

          本文标题:监听键盘按键方法

          本文链接:https://www.haomeiwen.com/subject/utchodtx.html