2

我从教程中获取了这段代码,但我不明白 js 函数如何将 QuerySelector() 与要通过模板字符串选择的元素链接起来。

这是HTML:

<body>
  <div class="keys">
    <div data-key="65" class="key">
      <kbd>A</kbd>
      <span class="sound">clap</span>
    </div>
    <div data-key="83" class="key">
      <kbd>S</kbd>
      <span class="sound">hihat</span>
    </div>
    <div data-key="68" class="key">
      <kbd>D</kbd>
      <span class="sound">kick</span>
    </div>
    <div data-key="70" class="key">
      <kbd>F</kbd>
      <span class="sound">openhat</span>
    </div>
    <div data-key="71" class="key">
      <kbd>G</kbd>
      <span class="sound">boom</span>
    </div>
    <div data-key="72" class="key">
      <kbd>H</kbd>
      <span class="sound">ride</span>
    </div>
    <div data-key="74" class="key">
      <kbd>J</kbd>
      <span class="sound">snare</span>
    </div>
    <div data-key="75" class="key">
      <kbd>K</kbd>
      <span class="sound">tom</span>
    </div>
    <div data-key="76" class="key">
      <kbd>L</kbd>
      <span class="sound">tink</span>
    </div>
  </div>

  <audio data-key="65" src="sounds/clap.wav"></audio>
  <audio data-key="83" src="sounds/hihat.wav"></audio>
  <audio data-key="68" src="sounds/kick.wav"></audio>
  <audio data-key="70" src="sounds/openhat.wav"></audio>
  <audio data-key="71" src="sounds/boom.wav"></audio>
  <audio data-key="72" src="sounds/ride.wav"></audio>
  <audio data-key="74" src="sounds/snare.wav"></audio>
  <audio data-key="75" src="sounds/tom.wav"></audio>
  <audio data-key="76" src="sounds/tink.wav"></audio>

<script src="./script.js"></script>


</body>
</html>

这是JS:

window.addEventListener('keydown', (e) => {
  const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
  const key = document.querySelector(`div[data-key="${e.keyCode}"]`);
    if (!audio) return; 
    audio.currentTime = 0;
    audio.play();
    key.classList.add('playing');
  });

好吧,我怀疑这部分:
const audio = document.querySelector( audio[data-key="${e.keyCode}"]); const key = document.querySelector( div[data-key="${e.keyCode}"]);

这个怎么运作?为什么他需要把它放在Templete Strings里面?

4

2 回答 2

3

模板字符串不是必需的,它们只是方便。

这是没有模板字符串的相同代码:

  const audio = document.querySelector('audio[data-key="' + e.keyCode + '"]');

这里的模板字符串有助于使代码更清晰,而不是使用连接。

这段代码的目标是创建一个像这样的查询 'audio[data-key="81"]',它将以音频元素为目标,其data-key属性为"81"

于 2020-05-03T11:56:33.687 回答
1

模板字符串用于注入 js 代码。例如。在这部分代码中

audio[data-key="${e.keyCode}"]

e.keyCode 将替换为事件对象中的 keyCode。假设键码是 53 那么代码会变成这样

audio[data-key="53"]

表示 e.keyCode 的值被注入到这段代码 audio[data-key="53"] 中。

于 2020-05-03T11:56:23.107 回答