使用 2 个键码返回事件

Use 2 keycodes to return event

提问人:kolbykiernan 提问时间:10/22/2023 最后编辑:kolbykiernan 更新时间:10/27/2023 访问量:60

问:

我已经学习 JS 3 周了,并且正在做一个构建可弹钢琴的项目。输入字母 c 时,它会播放音符 c。这部分工作正常,但现在我希望用户按住控制键并键入 c 以使其播放不同的音符 c#。我将如何设置?以下是我尝试过的工作,但我无法让它工作。

任何重构建议也很有帮助 - 我将玩更多的键

document.addEventListener('keydown', (playNote) =>{

    if(playNote.key == 'c'){
        document.getElementById('low-c').play();    
            }
 
    if(playNote.key == 'c' && playNote.cntrlkey == true){
        document.getElementById('low-c#').play();
            }
    }
javascript addeventlistener 键控

评论

1赞 Mark Schultheiss 10/22/2023
我会将 更改为 be 通常用作 ID 选择器,这将避免确保您的代码在所有地方都处理它。low-c#low-c-sharp#
0赞 Wyck 10/27/2023
你有一个错别字。您要查找的 keydown 事件属性称为 not 。ctrlKeycntrlkey

答:

0赞 aabdulahad 10/22/2023 #1

查看此页面以了解键盘事件。
您将在“然后执行”下
找到一个值,如果按下 ctrl 键
playNote.ctrlKey

if(playNote.key == 'c' && playNote.ctrlKey)
1赞 Mister Jojo 10/22/2023 #2

只是:

document.addEventListener('keydown', evt =>
  {
  if (evt.key == 'c') 
    {
    if (evt.ctrlKey)
      document.getElementById('low-c#').play();
    else
      document.getElementById('low-c').play();
    }
  });

评论

0赞 Wyck 10/27/2023
这个纯代码答案可以通过包含简短的解释来改进。
0赞 Mister Jojo 10/27/2023
@Wyck 对我来说,这只是编程初学者的问题,根据经验,我知道这里的这些帖子放在这个网站上并不重要,并且由于空间原因必须清除。
1赞 Ali Nauman 10/22/2023 #3

你很接近。正如另一个答案所提到的,您要读取的属性是 ,而不是 。另一个问题是逻辑问题 - 您需要在检查 c 按下之前检查 ctrl 键按下,并且还需要使用 if else。否则,按 ctrl+c 时将同时播放 c 和 c#。ctrlKeycntrlkey

document.addEventListener("keydown", (event) => {
  if (event.key === "c" && event.ctrlKey == true) {
    document.getElementById("low-c#").play();
  } else if (event.key === "c") {
    document.getElementById("low-c").play();
  }
});

评论

2赞 Mark Schultheiss 10/22/2023
真的不需要这个零件== true
0赞 XMehdi01 10/22/2023 #4

当您按下该键时,此代码会播放不同的钢琴音符,以及它是否与该键结合。如果按 ,它会播放 low-c#;如果只按 ,它会播放低 CcCtrlCtrl + cc

document.addEventListener('keydown', (playNote) => {
    if (playNote.key === 'c' && playNote.ctrlKey) {
        document.getElementById('low-c#').play();
    } else if (playNote.key === 'c') {
        document.getElementById('low-c').play();
    }
});