【问题标题】:Bluetooth headphones button event detection in javascriptjavascript中的蓝牙耳机按钮事件检测
【发布时间】:2018-11-25 11:55:38
【问题描述】:

我正在构建一个网络应用程序,我可以在其中检测耳机按钮事件。我在插入耳机时成功捕获了耳机按钮事件。现在我正在尝试捕获蓝牙耳机的下一个按钮事件。请问有什么帮助吗?

耳机按键检测代码。

 document.addEventListener('volumeupbutton', () => {
   //Do something here
 }, false);

我需要类似的东西。

【问题讨论】:

    标签: javascript events browser bluetooth dom-events


    【解决方案1】:

    您可以使用keydown and keyup 事件来实现长按功能。

    // Imprementation of Long Press
    
    const longPressTime = 1500;
    let keyDownTimeout;
    document.addEventListener('keydown', e => {
      if (keyDownTimeout) {
        return;
      }
      keyDownTimeout = setTimeout(() => {
        // button was held for 1500ms, consider it a long-press
        if (e.code === 'ArrowUp') {
          console.log("Action Performed");
          // do long-press action
        } else {
          console.log("Other action performed");
        }
      }, longPressTime);
    });
    
    document.addEventListener('keyup', e => {
      clearTimeout(keyDownTimeout);
      keyDownTimeout = 0;
    });
    Press any key

    以上方法适用于单键长按。请参阅KeyCode 获取密钥代码。 Demo of above

    【讨论】:

    • 这是一个替代方案,但不回答原始问题。
    • 我的回答是针对原始问题的。您评论了我的回答,我通过编辑和回复解决了您的 cmets,我不确定您为什么将我的代码重新编写为新答案(这更像是一个长按示例而不是问题的答案)。
    • @NickGagne 我发现代码还有另一个缺陷。按下键时会多次监听 keydown 事件。如果再次检查,上面的 keydown 事件返回空,而 keyDownTimeout 已经定义。
    【解决方案2】:

    我不相信使用内置的 volumeupbutton 事件可以让您检测点击的时间长短,以确定是否应将其视为提高音量或跳过曲目。相反,您应该能够使用 keyup/keydown 事件,结合 keyCode 属性来确定它是否是音量按钮,如下所示:

    const longPressTime = 1500;
    let volumeUpButtonTimeout;
    const volumeButtonKeyCode = 0; // you'll need to determine the key code
    
    // cross platform way to get the key code
    const getKeyCode = e => {
      if (e.key !== undefined) {
        return e.key;
      } else if (e.keyIdentifier !== undefined) {
        return e.keyIdentifier;
      } else if (e.keyCode !== undefined) {
        return e.keyCode;
      }
    }
    
    document.addEventListener('keydown', e => {
      if (getKeyCode(e) == volumeButtonKeyCode) {
        volumeUpButtonTimeout = setTimeout(() => {
          // button was held for 1500ms, consider it a long-press
          // do long-press action
        }, longPressTime)
      }
    });
    
    document.addEventListener('keyup', e => {
      if (getKeyCode(e) == volumeButtonKeyCode) {
        clearTimeout(volumeUpButtonTimeout);
      }
    });
    

    您可以使用此代码来确定哪个 keyCode 对应于音量增大按钮:

    document.addEventListener('keyup', e => {
      console.log(e.keyCode);
    });
    

    【讨论】:

    • 您在这两种情况下都在收听keyup,我认为第一个侦听器是keydown,第二件事,longPressTime 对于每种情况都是相同的,因此应该为每个情况启动 setTimeout回调,并根据每个keyCode执行不同的动作。
    • 另外,keyCode 已弃用且不推荐使用。 developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
    • 感谢您指出两个键盘输入错误,我已经解决了。使用我的代码,我只检查是否长按音量按钮键码,因此无需根据任何其他键码进行跟踪。 event.keyCode 属性已被弃用,但对 event.code 的支持还不是 100%,所以我添加了一个函数以跨平台方式获取该代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多