🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

1回答

2571閲覧

ルーレット 16回目のスタートを押すと、ストップボタンが押せません

pppslash

総合スコア5

JavaScript

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

0グッド

0クリップ

投稿2019/11/12 07:16

編集2019/11/12 07:32

JavaScriptでルーレットを作成しております。
16の番号をランダムに出し、スタートとストップを16回の繰り返しで、全ての目に停止可能。
16回停止後はスタートボタンが押せなくなる(リセットボタンで押せるようになる)

webでは定番の課題のようですが、
16回目のスタートを押すと、ストップボタンが非活性状態になってしま、
16回目のストップボタンを押すことができません。

16回目のストップボタンを押すにはどうすれば良いでしょか。

//1~16の数字をランダムに生成する関数(一度出た数字は除外) var num; var excludes = []; //ルーレット中、オレンジパネルを白に戻すためのフラッグ var number_flag = false; //再スタートする際、選ばれた数字をグレーに変えるためのフラッグ var stop_flag = false; //ルーレットに使うタイマーを格納するID var interval_id; function random16() { var arr = []; for (var i = 1; i <= 16; ++i) { if(excludes.indexOf(i) === -1) { arr.push(i); } } num = arr[Math.floor(Math.random()*arr.length)]; } //テーブルの挿入 for (var i = 1; i <= 4; i++) { $('#roulette').append('<tr class="' + i + '"></tr>'); } for (var j = 1; j <= 16; j++) { $('.' + Math.ceil(j / 4)).append('<td id="' + j + '"></td>'); $('#' + j).append('<p>' + j + '</p>'); } //初期設定、ストップボタン無効化(無意味にstop_flagが立つのを防ぐ) $('#stop_button').prop('disabled', true); //スタート $('#start_button').on('click', function roulette_start() { if (excludes.length !== 15) { if (stop_flag === true) { $('#' + num).css('background-color', 'gray'); stop_flag = false; } number_flag = true; interval_id = setInterval(roulette, 10); $('#start_button').prop('disabled', true); $('#stop_button').prop('disabled', false); } else if (excludes.length === 15) { $('#' + num).css('background-color', 'gray'); stop_flag = false; random16(); $('#' + num).css('background-color', 'orange'); $('#start_button').prop('disabled', true); $('#stop_button').prop('disabled', true); } }); //ルーレット 1から16の数字を生成して背景色をつける function roulette () { if (number_flag === true) { number_flag = false; } else if (number_flag === false) { $('#' + num).css('background-color', 'white'); } random16(); $('#' + num).css('background-color', 'orange'); } //ストップ $('#stop_button').on('click', function roulette_stop() { clearInterval(interval_id); excludes.push(num); stop_flag = true; $('#start_button').prop('disabled', false); $('#stop_button').prop('disabled', true); }); //リセット $('#reset_button').on('click', function roulette_reset() { clearInterval(interval_id); excludes = []; for (i = 1; i <= 16; i++) { $('#' + i).css('background-color', 'white'); num = 0; stop_flag = false; $('#start_button').prop('disabled', false); $('#stop_button').prop('disabled', true); } }); コード

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

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

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

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

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

m.ts10806

2019/11/12 07:24

コードはマークダウンのcode機能を利用してご提示ください
guest

回答1

0

ベストアンサー

#start_buttonをクリックしたとき、取り除かれた要素が15個のときに#stop_buttonを押せなくするよう処理が書かれています。

Javascript

1//スタート 2$('#start_button').on('click', function roulette_start() { 3 if (excludes.length !== 15) { 4 if (stop_flag === true) { 5 $('#' + num).css('background-color', 'gray'); 6 stop_flag = false; 7 } 8 number_flag = true; 9 interval_id = setInterval(roulette, 10); 10 $('#start_button').prop('disabled', true); 11 $('#stop_button').prop('disabled', false); 12 } else if (excludes.length === 15) { 13 $('#' + num).css('background-color', 'gray'); 14 stop_flag = false; 15 random16(); 16 $('#' + num).css('background-color', 'orange'); 17 $('#start_button').prop('disabled', true); 18 $('#stop_button').prop('disabled', true); 19 } 20});

そのif文を除去してください。

Javascript

1//スタート 2$('#start_button').on('click', function roulette_start() { 3 if (stop_flag === true) { 4 $('#' + num).css('background-color', 'gray'); 5 stop_flag = false; 6 } 7 number_flag = true; 8 interval_id = setInterval(roulette, 10); 9 $('#start_button').prop('disabled', true); 10 $('#stop_button').prop('disabled', false); 11});

投稿2019/11/12 07:32

BluOxy

総合スコア2663

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

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

pppslash

2019/11/12 07:37

ありがとうございます。 else ifから下を全て削除したら1回目からストップができなくなってしまいました。。。
pppslash

2019/11/12 07:44

動作確認用、ありがとうございます!! ストップボタン押せました!!!こちらで進めてみます!
BluOxy

2019/11/12 07:53

修正がざっくりしすぎたかもしれません。 上記の修正では16回目のルーレットを行った際、10ミリ秒間隔で同じ数字に対して背景色をオレンジに塗る処理が走ります。良しとするかはpppslashさんの感覚にお任せいたします。
pppslash

2019/11/12 07:55

ありがとうございます。 こちらで一度確認をとってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問