[JavaScript30] 🥁 01. Drum Kit


🥁 01. Drum Kit


Drum Kitは、A、S、D、F、G、H、J、K、Lのボタンを受け取り、アニメーション効果とドラム音を出力します
初期html:index-start.htmlを参照してください.
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JS Drum Kit</title>
  <link rel="stylesheet" href="style.css">
</head>
<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>
// add Answer

</script>


</body>
</html>
初期画面

🌏 新知


👉 kbd Tag


kbdタグは、キーボード入力および音声入力などの任意のデバイスを使用するユーザ入力を表す.
注意:https://developer.mozilla.org/ko/docs/Web/HTML/Element/kbd

👉 data-*プロパティ


dataで始まる任意のプロパティを使用できます.
data-colums、data-index-number、data-parentなど...
この例で使用するdata-keyプロパティは、上のdivと下のaudioを組み合わせたプロパティです.
キー値を押したキーボードキーASCII-コード値に接続します.
注意:https://developer.mozilla.org/ko/docs/Learn/HTML/Howto/Use_data_attributes

🌏 プロセス


👉 1.キー入力時に効果音を追加します。

// add Answer
window.addEventListener('keydown', function(e){
    // console.log(e);
    // console.log(e.keyCode);
    const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
    // console.log(audio);
    if(!audio) return; // stop the function from running all togethers
    audio.currentTime = 0; // rewind to the start, 키의 재입력시간 설정.
    audio.play();

});
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
일일이 keyCode를 입력하지 않고, ES6문법 활용해 백틱(`)과 ${e.keycode}로 값을 받음.
keycodeはconsoleです.log(e.keycode)を使用して確認します.

👉 2.キーの再入力時間の設定

audio.currentTime = 0; // rewind to the start, 키의 재입력시간 설정.

👉 3.効果終了時に変化する関数を作成する

function removeTransition(e){
 	// console.log(e);
    if(e.propertyName !== 'transform') return; // skip if is it's not a transform
    // console.log(e.prototypeName);
    // console.log(this);
    this.classList.remove('playing');
}
removeTransitionでコンソールを使用します.ログ(e)結果

キーのプロパティ名にtransformがない場合は、次のコードは実行されません.存在する場合は、再生クラスは削除されます.

👉 4.効果音の出力と終了を設定する

const keys = document.querySelectorAll('.key');
keys.forEach(key => key.addEventListener('transitionend', removeTransition));
window.addEventListener('keydown', playSound);
const keys = document.querySelectorAll('.key');
keysにはkeyクラスを持つすべての要素が含まれています.
keys.forEach(key => key.addEventListener('transitionend', removeTransition));
各要素をforEach()で変更した後、removeTransition関数を実行します.
keys.forEach(key => key.addEventListener('transitionend', removeTransition));
ES 6構文の矢印関数を使用します.
上で作成した効果音を追加する関数をplaySound()に設定します.
スクリプトの下部にkeydownイベントを追加します.