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

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

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

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

Q&A

解決済

1回答

929閲覧

ボタンを押したら経過時間の表示 配列 配列の値を表示 ループ

kobayashi.j

総合スコア9

JavaScript

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

0グッド

0クリップ

投稿2020/10/06 02:16

編集2020/10/06 07:56

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>Stopwatch</title> 6 <link rel="stylesheet" href="styles.css"> 7 8</head> 9<body> 10 <div id="timer">00:00.000</div> 11 <button id="start">Start</button> 12 <button id="stop">Stop</button> 13 <button id="reset">Reset</button> 14 <select name="mintus" id ="mintus" class="mintus"> 15 <option value="time_1" id="time1">30</option> 16 <option value="time_2" id="time2">60</option> 17 <option value="time_3" id="time3">90</option> 18 </select> 19 <button id="timeway">TimeWay</button> 20 <div id="sum_way"></div> 21 <div> 22 <button id="sum">計算</button> 23 <div id="sum_account" ></div> 24 </div> 25 26 27 <script src="main.js"></script> 28</body> 29</html>

javascript

1'use strict'; 2{ 3 4 5 const timer = document.getElementById('timer'); 6 const start = document.getElementById('start'); 7 const stop = document.getElementById('stop'); 8 const reset = document.getElementById('reset'); 9 const mintus = document.getElementById('mintus'); 10 const math = document.getElementById('sum'); 11 const sum_account = document.getElementById('sum_account'); 12 const timeway = document.getElementById('timeway'); 13 const sum_way = document.getElementById('sum_way'); 14 15 let startTime; 16 let timeoutId; 17 let elapsedTime = 0; 18 19 20 function countUp() { 21 const d = new Date(Date.now() - startTime + elapsedTime); 22 const m = String(d.getMinutes()).padStart(2, '0'); 23 const s = String(d.getSeconds()).padStart(2, '0'); 24 const ms = String(d.getMilliseconds()).padStart(3, '0'); 25 timer.textContent = `${m}:${s}.${ms}`; 26 27 timeoutId = setTimeout(() => { 28 countUp(); 29 }, 10); 30 } 31 32 function setButtonStateInitial() { 33 start.disabled = false; 34 stop.disabled = true; 35 reset.disabled = true; 36 } 37 38 function setButtonStateRunning() { 39 start.disabled = true; 40 stop.disabled = false; 41 reset.disabled = true; 42 } 43 44 function setButtonStateStopped() { 45 start.disabled = false; 46 stop.disabled = true; 47 reset.disabled = false; 48 } 49 50 // 残り時間の計算 51 function calculateRemaining() { 52 let timeTxt = timer.textContent.replace(":", "").replace(".", ""); 53 const timeresult = mintus.value; 54 switch(timeresult) { 55 case 'time_1': 56 const result1 = String(3000000 - timeTxt); 57 reguler(result1); 58 break; 59 case 'time_2': 60 const result2 = String(6000000 - timeTxt); 61 reguler(result2); 62 break; 63 case 'time_3': 64 const result3 = String(9000000 - timeTxt); 65 reguler(result3); 66 break; 67 } 68 } 69 //正規表現 70 function reguler(regular) { 71 const regulation = /(\d{2})(\d{2})(\d{3})/; 72 const timemath = regular.replace(regulation,'$1分$2秒$3'); 73 sum_account.innerHTML = timemath; 74 } 75 76実装中の部分 77ーーーーーーーーーーーーー 78 //途中経過の時間表示 79 function way(){ 80 var timeoutway =[]; 81 let timeTxt = timer.textContent.replace(":", "").replace(".", ""); 82 const regulation2 = /(\d{2})(\d{2})(\d{3})/; 83 const timemath2 = timeTxt.replace(regulation2,'$1分$2秒$3'); 84 timeoutway.push(timemath2) 85 console.log(timeoutway); 86 sum_way.innerHTML = timeoutway[0-4]; 87 88 } 89 ーーーーーーーーーーーーーーーーーーーー 90 setButtonStateInitial(); 91 92 start.addEventListener('click', () => { 93 setButtonStateRunning(); 94 startTime = Date.now(); 95 countUp(); 96 }); 97 98 stop.addEventListener('click', () => { 99 setButtonStateStopped(); 100 clearTimeout(timeoutId); 101 elapsedTime += Date.now() - startTime; 102 }); 103 104 reset.addEventListener('click', () => { 105 setButtonStateInitial(); 106 timer.textContent = '00:00.000'; 107 elapsedTime = 0; 108 }); 109 110 111 math.addEventListener('click', () => { 112 stop.click(); 113 calculateRemaining(); 114 }); 115 116 timeway.addEventListener('click', () => { 117 way(); 118 }); 119}

やりたい機能としてボタンを押せば、途中経過の時間をストップヲッチを止めることなく、表示させ、それを複数回行いたい

一回だけは表示できたがそれを複数回行ための方法をしらべていても見つからないので、教えていただけると助かります。

現状機能として悩んでいる部分
1 htmlのTimeWayボタンを押したらtimeTxtの値を時間表示をし、その値を配列に一回は入れることはできたがもう一回TimeWayボタンを押す時に同じ処理を10回くらい繰り返したい
2 その配列に入ってる値をボタンを押すごとにid="sum_way"に表示をさせる

この二つが現状わからないので、お教えただけると大変助かります。
説明が下手ですいません。よろしくお願いします。

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

前回の質問の私の回答をみてください

計算をおしてもストップウォッチを止めないということですよね?
math.addEventListenerの中のstop.click()をコメントアウトするだけ

投稿2020/10/06 02:43

yambejp

総合スコア116724

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

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

kobayashi.j

2020/10/06 02:48

それとはまた別に中間結果の表示する実装です。 なのでmath.addEventListenerの中のstop.click()は実行とは別です ストップヲッチは動いたままtimewayのボタンを押せば、押した時の時間を表示するということです
yambejp

2020/10/06 03:27

なるほど、それならこれをつけたすだけでは? timeway.addEventListener('click', () => { sum_account.textContent=timer.textContent; });
kobayashi.j

2020/10/06 03:36

その値を時間表現して、一回押せば表示され2回目押せば一回目の表示を残しつつ、2回目表示をするということですが? 上記のだと一つの値を表示されるだけなので、それをクリック数押せば、表示時間を出すことをしたいです
yambejp

2020/10/06 03:45

sum_accountに配列風の文字列を記載すればいいのですか? resetで配列をクリアするのでしょうか?
kobayashi.j

2020/10/06 03:55

流れとして 1timewayのボタンをおす 2ボタンを押したことで、時間表示をsum_wayに表示する(ストップヲッチは継続して動いている) 3もう一回time wayのボタンをおす 41回目の表示された時間の下に新たにtimewayのボタンを押した時の時間をsum_wayに表示する(ストップヲッチは継続して動いている) なので、わからないこととしては配列に値をtimewayを押すたびに入れて、表示させ、それを繰り返す実装です
yambejp

2020/10/06 03:56

let sum_ways =[]; で、配列を1つ作っておいて timeway.addEventListener('click', () => { if(sum_ways[sum_ways.length-1]!==timer.textContent) sum_ways.push(timer.textContent); sum_account.textContent=sum_ways.join(","); }); とか reset.addEventListener('click', () => { sum_ways=[]; setButtonStateInitial(); sum_way.textContent = ''; timer.textContent = '00:00.000'; elapsedTime = 0; }); にすればよいのでは?
kobayashi.j

2020/10/06 05:01

ありがとうございます。 if(sum_ways[sum_ways.length-1]!==timer.textContent) sum_ways.push(timer.textContent); sum_account.textContent=sum_ways.join(","); });の説明をよかったらお願いします。 あともう少しわかりやすい実装方法はありますでしょうか?
kobayashi.j

2020/10/06 07:20

ありがとうございます。 表示した値を縦表示と横に空白のtextする実装はどのようにすればよろしいでしょうか?
yambejp

2020/10/06 07:25

> 表示した値を縦表示と横に空白のtextする実装 ちょっと意味がわかりません、質問文に手書きの画像でいいので図示してください
yambejp

2020/10/06 08:21

「テキスト」と書かれた部分は何がはいるのですか?
kobayashi.j

2020/10/06 08:27

そのテキストは空白で大丈夫です
yambejp

2020/10/06 08:33

codepen更新しました。リストでよいのですかね?
kobayashi.j

2020/10/06 08:50

リストの中にtextはできますできますしょうか?
yambejp

2020/10/06 08:51

ごめんなさい、おっしゃる意味がわかりません
kobayashi.j

2020/10/06 09:02

時間の表示の横に何をやったか記入できるようにstyleのtextを時間の表示一つにつき1つを出力したいのですが、説明はわかりましたでしょうか?
yambejp

2020/10/06 14:35 編集

ごめんなさい、全くわかりません あとから書き込めるように空のテキストボックスがあればいいのですか? HTMLかなにかでソースを例示してもらうほうがよいかも 一応codepenのサンプルを更新しておきましたが、やりたいこととはなんか違う気がします・・・
kobayashi.j

2020/10/07 01:40

ありがとございます 一応理想の形です
yambejp

2020/10/07 01:45

あら・・・これで大丈夫でしたか、では何かあれば別途指摘ください 「styleのtextを時間の表示一つにつき1つを出力」から想像するには ちょっと厳しかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問