[JavaScript30] 🥁 01. Drum Kit
34054 ワード
🥁 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イベントを追加します.
Reference
この問題について([JavaScript30] 🥁 01. Drum Kit), 我々は、より多くの情報をここで見つけました
https://velog.io/@cjh951114/JavaScript30-01.-Drum-Kit
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
<!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>
// 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}로 값을 받음.
audio.currentTime = 0; // rewind to the start, 키의 재입력시간 설정.
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');
}
const keys = document.querySelectorAll('.key');
keys.forEach(key => key.addEventListener('transitionend', removeTransition));
window.addEventListener('keydown', playSound);
const keys = document.querySelectorAll('.key');
keys.forEach(key => key.addEventListener('transitionend', removeTransition));
keys.forEach(key => key.addEventListener('transitionend', removeTransition));
Reference
この問題について([JavaScript30] 🥁 01. Drum Kit), 我々は、より多くの情報をここで見つけました https://velog.io/@cjh951114/JavaScript30-01.-Drum-Kitテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol