質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

820閲覧

stop watchのゲームの結果を点数化したい

beginner001

総合スコア29

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/05/17 04:50

javascript

1<html> 2 <html lang="ja"> 3 <head> 4 <meta charset="utf-8" /> 5 <title>ストップウォッチ</title> 6 </head> 7 <body> 8 <div> 9 <h1>StopWatch</h1> 10 <h1 id="timerLabel">00:00:00</h1> 11 <input type="button" onclick="start()" value="START" id="startBtn" /> 12 <input type="button" onclick="stop()" value="STOP" /> 13 <input type="button" onclick="reset()" value="RESET" /> 14 </div> 15 <div id="dsp"></div> 16 <script> 17 let status = 0; 18 let time = 0; 19 let startBtn = document.getElementById("startBtn"); 20 let timerLabel = document.getElementById("timerLabel"); 21 let dsp = document.getElementById("dsp"); 22 23 function start() { 24 status = 1; 25 startBtn.disabled = true; 26 dsp.innerHTML = ""; 27 timer(); 28 } 29 30 function stop() { 31 status = 0; 32 startBtn.disabled = false; 33 34 if (timerLabel.innerHTML == "00:10:00") { 35 dsp.innerHTML = 100; 36 } 37 38 else if (timerLabel.innerHTML > "00:10:00" { 39 dsp.innerHTML = "失格"; 40} 41 42 else { 43 dsp.innerHTML = "00:10:00"-timer(); 44 } 45 46 } 47 48 49 function reset() { 50 status = 0; 51 time = 0; 52 timerLabel.innerHTML = "00:00:00"; 53 dsp.innerHTML = ""; 54 startBtn.disabled = false; 55 } 56 57 58 59 60 function timer() { 61 if (status == 1) { 62 setTimeout(function () { 63 time++; 64 // 分・秒・ミリ秒を計算 65 let min = Math.floor(time / 100 / 60); 66 let sec = Math.floor(time / 100); 67 let mSec = time % 100; 68 69 if (min < 10) min = "0" + min; 70 if (sec >= 60) sec = sec % 60; 71 if (sec < 10) sec = "0" + sec; 72 if (mSec < 10) mSec = "0" + mSec; 73 timerLabel.innerHTML = min + ":" + sec + ":" + mSec; 74 timer(); 75 }, 10); 76 } 77 } 78 </script> 79 </body> 80 81</html>

function stop()でタイマーを止めた時にぴったり00:10:00だったら100点
もし00:09:98なら00;10;00の差分の02を得点にしたいと思ってfunction stop()をいじってみましたが、計算をどうすればいいのかが思い浮かびません。
どなたかお教えください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/05/17 04:54

コードインデントはきちんと揃えた方が良いです。 コードフォーマット機能のあるエディタを使いましょう。 とりあえずであれば整形サービスを使ってください。 それに、これは「計算」ではないです。 考え方の問題ですが、何なら何点と決め打ちで良いレベルです。 「何なら」を「○~Xまで」の範囲で決めるとかそういう感じです。
beginner001

2020/05/21 04:57

例えば何人かで競っていて10:00:00との差を考えたいと思ったのですが。
guest

回答1

0

ベストアンサー

こんにちは、stop()の関数を以下のようにしたらどうでしょう

Javascript

1 2 function stop() { 3 status = 0; 4 startBtn.disabled = false; 5 if (timerLabel.innerHTML == "00:10:00") { 6 dsp.innerHTML = 100; 7 } else if (timerLabel.innerHTML > "00:10:00") { 8 dsp.innerHTML = "失格"; 9 } else { 10 dsp.innerHTML = (time + 1) / 10; 11 } 12 }

投稿2020/05/17 23:03

fake_shibe

総合スコア806

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner001

2020/05/21 05:05

何人かで10:00:00にどれだけ近い値を出すかでで競うことを考えています。 Aは 00:99:01 を出したので 00:00:99、 Bは 00:99:71 を出したので 00:00:29 でより小さいBの勝利にしたいです。
fake_shibe

2020/05/21 11:36

こんにちは、以下のようなかんじでしょうか? function stop() { status = 0; startBtn.disabled = false; if (timerLabel.innerHTML == "00:10:00") { dsp.innerHTML = 100; } else if (timerLabel.innerHTML > "00:10:00") { dsp.innerHTML = "失格"; } else { var score = ("10" - timerLabel.innerHTML.replace(/^[^:]*:/, "").replace(/:/, ".") - 0.01).toFixed(2); dsp.innerHTML = score; } }
beginner001

2020/05/21 23:39

有難うございました。 正規表現を調べました。例えば郵便番号123-4567の場合 /^\d{3}-?\d{4}$/ で  /…/で囲まれた範囲がが正規表現             ^行の先頭 $行の終わり \dは0-9の文字 .は何らかの文字 ?は1文字あるかないか  toFixed(2)が四捨五入など しかし下記の行の意味が力不足で判然としません。 ("10" - timerLabel.innerHTML.replace(/^[^:]*:/, "").replace(/:/, ".")- 0.01).toFixed(2); もしよろしければ逐語訳的に解説していただけないでしょうか。
fake_shibe

2020/05/22 11:29

まずは、 ///////////////////////////////////////////////////////////// timerLabel.innerHTML.replace(/^[^:]*:/, "").replace(/:/, ".") ですが、ストップウォッチが00:03:27の表示だった場合に差分を計算出来るように、03.27に書き換えるためにやっています。 "10" - "00:03:27" では求めている値が返ってこないので。NaN "10" - "03.27" だと差分(6.73)が返ってくると思います。 replace(/^[^:]*:/, "") ですが、":"が初めて現れる場所まで("00:03:27"だと"00:")を""(削除)に置き換えています。 次に続く、 replace(/:/, ".") ですが、現在"00:03:27"が"03:27"になっています。"10" - "03:27"では計算できませんので、 ":"を"."に置き換える必要があります。03.27になります。これで差分を計算することができます。 //////////////////////////////////////////////////////////// 次に - 0.01 とやっていますが、自分もよく分かりませんが-0.01秒の時差があるようです。 //////////////////////////////////////////////////////////// 最後に.toFixed(2)ですが ("10" - timerLabel.innerHTML.replace(/^[^:]*:/, "").replace(/:/, ".") - 0.01)で求めた数字が、 6.7333333333となる場合もありますので、.toFixed(2)で小数点以下の数字をコントロールしています。 .toFixed(2)で6.73 .toFixed(1)で6.7 が返ります。 ///////////////////////////////////////////////////////////// 以上です。
beginner001

2020/05/22 23:00

よく理解できました。いつも本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問