以下の画像のようなstop,resetの三つのボタンがあるストップウォッチを作っています。しかし、startを三回押したらstopを三回押さないと止まってくれないといったように、同じボタンを連打することで問題が起きてしまいます。その問題を解決するために、opacity===0.5のときはreturnでそれ以降の処理を行わないようにといったif文を書くことで、opacity0.5のボタンは押せなくするという対策を試みたのですが、全く無意味で連打できてしまいます。なぜうまくいかないのでしょうか?ご教授お願いいたします。
JavaScript
1const start = document.getElementById('start'); 2 const stop = document.getElementById('stop'); 3 const reset = document.getElementById('reset'); 4 let startTime; 5 let timeoutId; 6 let elapsedTime = 0; 7 function countUp () { 8 const d = new Date(Date.now() - startTime + elapsedTime); 9 const m = String(d.getMinutes()).padStart(2,'0'); 10 const s = String(d.getSeconds()).padStart(2,'0'); 11 const ms = String(d.getMilliseconds()).padStart(3,'0'); 12 timer.textContent = `${m}:${s}:${ms}`; 13 timeoutId = setTimeout(countUp,10); 14 } 15 16 stop.style.opacity = 0.5; 17 reset.style.opacity = 0.5; 18 19 start.addEventListener('click',() => { 20 if(start.style.opacity === 0.5) { 21 return; 22 } 23 startTime = Date.now(); 24 countUp(); 25 start.style.opacity = 0.5; 26 stop.style.opacity = 1; 27 reset.style.opacity = 0.5; 28 }); 29 stop.addEventListener('click',() => { 30 if(stop.style.opacity === 0.5) { 31 return; 32 } 33 clearTimeout(timeoutId); 34 elapsedTime += Date.now() - startTime; 35 start.style.opacity = 1; 36 stop.style.opacity = 0.5; 37 reset.style.opacity = 1; 38 }); 39 reset.addEventListener('click',() => { 40 if(reset.style.opacity === 0.5) { 41 return; 42 } 43 timer.textContent ="00:00.000"; 44 elapsedTime = 0; 45 start.style.opacity = 1; 46 stop.style.opacity = 0.5; 47 reset.style.opacity = 0.5; 48 });
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/27 11:47