前提・実現したいこと
JavaScript30という海外のJS勉強サイトで勉強をしている初心者です。
一番最初のコースなのですが、ビデオで説明してくれている人はHTMLファイルの中に<script>タグを書きその中にJSのコードを書いています。
私はファイルを分けた方がスッキリするので外部定義をしているのですが、ビデオ通りにコードを書いても外部定義で指定しているとプログラミングがうまく動きません。
外部ファイルのindex.jsで書いているコードをHTML内の<script>タグの中に書き込むと期待通り動くのですが、HTML内に直接定義するのと外部ファイルで定義するのは何か違いがあるのでしょうか。
該当のソースコード
javascript
1function removeTransition(e) { 2 if (e.propertyName !== 'transform') return; 3 e.target.classList.remove('playing'); 4} 5 6function playSound(e) { 7 const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`); 8 const key = document.querySelector(`div[data-key="${e.keyCode}"]`); 9 if (!audio) return; 10 11 key.classList.add('playing'); 12 audio.currentTime = 0; 13 audio.play(); 14} 15 16const keys = Array.from(document.querySelectorAll('.key')); 17keys.forEach(key => key.addEventListener('transitionend', removeTransition)); 18window.addEventListener('keydown', playSound); 19
HTML
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>JS Drum Kit</title> 6 <link rel="stylesheet" href="style.css"> 7 <script src="index.js"></script> 8</head> 9<body> 10 11 12 <div class="keys"> 13 <div data-key="65" class="key"> 14 <kbd>A</kbd> 15 <span class="sound">clap</span> 16 </div> 17 <div data-key="83" class="key"> 18 <kbd>S</kbd> 19 <span class="sound">hihat</span> 20 </div> 21 <div data-key="68" class="key"> 22 <kbd>D</kbd> 23 <span class="sound">kick</span> 24 </div> 25 <div data-key="70" class="key"> 26 <kbd>F</kbd> 27 <span class="sound">openhat</span> 28 </div> 29 <div data-key="71" class="key"> 30 <kbd>G</kbd> 31 <span class="sound">boom</span> 32 </div> 33 <div data-key="72" class="key"> 34 <kbd>H</kbd> 35 <span class="sound">ride</span> 36 </div> 37 <div data-key="74" class="key"> 38 <kbd>J</kbd> 39 <span class="sound">snare</span> 40 </div> 41 <div data-key="75" class="key"> 42 <kbd>K</kbd> 43 <span class="sound">tom</span> 44 </div> 45 <div data-key="76" class="key"> 46 <kbd>L</kbd> 47 <span class="sound">tink</span> 48 </div> 49 </div> 50 51 <audio data-key="65" src="sounds/clap.wav"></audio> 52 <audio data-key="83" src="sounds/hihat.wav"></audio> 53 <audio data-key="68" src="sounds/kick.wav"></audio> 54 <audio data-key="70" src="sounds/openhat.wav"></audio> 55 <audio data-key="71" src="sounds/boom.wav"></audio> 56 <audio data-key="72" src="sounds/ride.wav"></audio> 57 <audio data-key="74" src="sounds/snare.wav"></audio> 58 <audio data-key="75" src="sounds/tom.wav"></audio> 59 <audio data-key="76" src="sounds/tink.wav"></audio> 60 61<!-- <script> 62 63</script> --> 64 65 66</body> 67</html> 68
CSS
1html { 2 font-size: 10px; 3 background: url(https://i.imgur.com/b9r5sEL.jpg) bottom center; 4 background-size: cover; 5} 6 7body,html { 8 margin: 0; 9 padding: 0; 10 font-family: sans-serif; 11} 12 13.keys { 14 display: flex; 15 flex: 1; 16 min-height: 100vh; 17 align-items: center; 18 justify-content: center; 19} 20 21.key { 22 border: .4rem solid black; 23 border-radius: .5rem; 24 margin: 1rem; 25 font-size: 1.5rem; 26 padding: 1rem .5rem; 27 transition: all .07s ease; 28 width: 10rem; 29 text-align: center; 30 color: white; 31 background: rgba(0,0,0,0.4); 32 text-shadow: 0 0 .5rem black; 33} 34 35.playing { 36 transform: scale(1.1); 37 border-color: #ffc600; 38 box-shadow: 0 0 1rem #ffc600; 39} 40 41kbd { 42 display: block; 43 font-size: 4rem; 44} 45 46.sound { 47 font-size: 1.2rem; 48 text-transform: uppercase; 49 letter-spacing: .1rem; 50 color: #ffc600; 51} 52
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/28 02:30