使用 keydown 播放音频
Playing audio with keydown
所以我无法使这段代码工作。应该发生的是,只要我按下与音频对应的键,音频文件就会播放。但是由于某种原因,每当我按下该键时,都没有任何反应。请帮忙?
window.addEventListener("keydown", function (ev)
{
const audio = document.querySelector("audio[data-key='${ev.keyCode}']");
if (!audio) return;
audio.play();
});
<body>
<div class="container">
<div data-key="65" class="key">
<kbd>A</kbd>
<span>CLAP</span>
</div
><div data-key="83" class="key">
<kbd>S</kbd>
<span>HIHAT</span>
</div
><div data-key="68" class="key">
<kbd>D</kbd>
<span>KICK</span>
</div
><div data-key="70" class="key">
<kbd>F</kbd>
<span>OPENHAT</span>
</div
><div data-key="71" class="key">
<kbd>G</kbd>
<span>BOOM</span>
</div
><div data-key="72" class="key">
<kbd>H</kbd>
<span>RIDE</span>
</div
><div data-key="74" class="key">
<kbd>J</kbd>
<span>SNARE</span>
</div
><div data-key="75" class="key">
<kbd>K</kbd>
<span>TOM</span>
</div
><div data-key="76" class="key">
<kbd>L</kbd>
<span>TINK</span>
</div>
<audio data-key="65" src="audio/clap.wav"></audio>
<audio data-key="83" src="audio/hihat.wav"></audio>
<audio data-key="68" src="audio/kick.wav"></audio>
<audio data-key="70" src="audio/openhat.wav"></audio>
<audio data-key="71" src="audio/boom.wav"></audio>
<audio data-key="72" src="audio/ride.wav"></audio>
<audio data-key="74" src="audio/snare.wav"></audio>
<audio data-key="75" src="audio/tom.wav"></audio>
<audio data-key="76" src="audio/tink.wav"></audio>
</div>
<!-- Main Script -->
<script src="js/script.js"></script>
</body>
我的方法可能完全错误,如果是这样的话,我需要做什么才能让它发挥作用?
您的问题是您的查询选择器:
const audio = document.querySelector("audio[data-key='${ev.keyCode}']")
您正在尝试使用变量替换,但这仅在使用反引号 (``) 而不是双引号 (""
) 时有效。在双引号中,它将被视为普通文本(即,它等于 audio[data-key='${ev.keyCode}']
)。
切换到反引号,应该就好了:
const audio = document.querySelector(`audio[data-key='${ev.keyCode}']`)
这将解析为:audio[data-key='65']
所以我无法使这段代码工作。应该发生的是,只要我按下与音频对应的键,音频文件就会播放。但是由于某种原因,每当我按下该键时,都没有任何反应。请帮忙?
window.addEventListener("keydown", function (ev)
{
const audio = document.querySelector("audio[data-key='${ev.keyCode}']");
if (!audio) return;
audio.play();
});
<body>
<div class="container">
<div data-key="65" class="key">
<kbd>A</kbd>
<span>CLAP</span>
</div
><div data-key="83" class="key">
<kbd>S</kbd>
<span>HIHAT</span>
</div
><div data-key="68" class="key">
<kbd>D</kbd>
<span>KICK</span>
</div
><div data-key="70" class="key">
<kbd>F</kbd>
<span>OPENHAT</span>
</div
><div data-key="71" class="key">
<kbd>G</kbd>
<span>BOOM</span>
</div
><div data-key="72" class="key">
<kbd>H</kbd>
<span>RIDE</span>
</div
><div data-key="74" class="key">
<kbd>J</kbd>
<span>SNARE</span>
</div
><div data-key="75" class="key">
<kbd>K</kbd>
<span>TOM</span>
</div
><div data-key="76" class="key">
<kbd>L</kbd>
<span>TINK</span>
</div>
<audio data-key="65" src="audio/clap.wav"></audio>
<audio data-key="83" src="audio/hihat.wav"></audio>
<audio data-key="68" src="audio/kick.wav"></audio>
<audio data-key="70" src="audio/openhat.wav"></audio>
<audio data-key="71" src="audio/boom.wav"></audio>
<audio data-key="72" src="audio/ride.wav"></audio>
<audio data-key="74" src="audio/snare.wav"></audio>
<audio data-key="75" src="audio/tom.wav"></audio>
<audio data-key="76" src="audio/tink.wav"></audio>
</div>
<!-- Main Script -->
<script src="js/script.js"></script>
</body>
我的方法可能完全错误,如果是这样的话,我需要做什么才能让它发挥作用?
您的问题是您的查询选择器:
const audio = document.querySelector("audio[data-key='${ev.keyCode}']")
您正在尝试使用变量替换,但这仅在使用反引号 (``) 而不是双引号 (""
) 时有效。在双引号中,它将被视为普通文本(即,它等于 audio[data-key='${ev.keyCode}']
)。
切换到反引号,应该就好了:
const audio = document.querySelector(`audio[data-key='${ev.keyCode}']`)
这将解析为:audio[data-key='65']