前提
画面内で「a」「s」「d」「f」「g」「h」などのキーを押すたびに
ブラウザコンソールにpropertyNameである「box-shadow」が表示されます。
疑問に思うこと
window.addEventListener から始まる1行目を最終行に持っていくことも可能です。
他の人のソースを見ていても
最初のfunctionなどの命令実行文を
1行目ではなく最終行目にあるのを見かけることがありますが
どういう理由からなのか教えていただけませんでしょうか。
また、this.classList.remove("active"); のthisに型を指定する記述を行う場合
どう付けるのが適切でしょうか。
Typescript
1 2window.addEventListener('keydown', playSound); 3function playSound(e){ 4 const sound = document.querySelector(`audio[data-key="${e.key}"]`); 5 const key = document.querySelector(`.key[data-key="${e.key}"]`)!; 6 7 if(!key) return; 8 (sound as HTMLAudioElement).currentTime = 0; 9 (sound as HTMLAudioElement).play(); 10 key.classList.add("active"); 11} 12 13function removeTransition(e:any){ 14 if(e.propertyName !== 'box-shadow') return; 15 this.classList.remove("active"); 16 console.log(e.propertyName); 17 } 18 19 const keys = document.querySelectorAll('.key'); 20 keys.forEach(key => key.addEventListener('transitionend', removeTransition)); 21 22
HTML
1 2<div class="sound_frame"> 3 <div data-key="a" class="key"> 4 <kbd>A</kbd> 5 <span class="sound">ベース</span> 6 </div> 7 <div data-key="s" class="key"> 8 <kbd>S</kbd> 9 <span class="sound">ドラム</span> 10 </div> 11 <div data-key="d" class="key"> 12 <kbd>D</kbd> 13 <span class="sound">ギター1</span> 14 </div> 15 <div data-key="f" class="key"> 16 <kbd>F</kbd> 17 <span class="sound">ギター2</span> 18 </div> 19 <div data-key="g" class="key"> 20 <kbd>G</kbd> 21 <span class="sound">ピアノ1</span> 22 </div> 23 <div data-key="h" class="key"> 24 <kbd>H</kbd> 25 <span class="sound">ピアノ2</span> 26 </div> 27</div> 28 29<audio data-key="a" src="sounds/bass01.wav"></audio> 30<audio data-key="s" src="sounds/drum01.wav"></audio> 31<audio data-key="d" src="sounds/guitar01.wav"></audio> 32<audio data-key="f" src="sounds/guitar02.wav"></audio> 33<audio data-key="g" src="sounds/piano01.wav"></audio> 34<audio data-key="h" src="sounds/piano02.wav"></audio> 35
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/25 16:03