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

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

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

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

Q&A

解決済

5回答

236閲覧

JavaScriptの処理の順序が分からない

ryoo_chksl

総合スコア69

JavaScript

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

0グッド

1クリップ

投稿2018/10/03 00:58

JavaScript

1for (i = 0; i < 3; i++) { 2 panels[i].children[1].addEventListener('click', function() { 3 clearTimeout(timers[this.dataset.index]); 4 stopCount++; 5 if (stopCount === panels.length) { 6 stopCount = 0; 7 checkResults(); 8 } 9 }); 10}

html

1<div class="panel"> 2 <img src="img/seven.png" width="90" height="110"> 3 <div class="stop" data-index="0">STOP</div> 4</div> 5<div class="panel"> 6 <img src="img/seven.png" width="90" height="110"> 7 <div class="stop" data-index="1">STOP</div> 8</div> 9<div class="panel"> 10 <img src="img/seven.png" width="90" height="110"> 11 <div class="stop" data-index="2">STOP</div> 12</div>

JavaScriptのfor文の処理の順序が分かりません。stopCountはどのタイミングで1増えるのでしょうか?

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

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

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

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

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

guest

回答5

0

スロットマシンですかね? panel にはスロットを表示する部分(img)と、ボタン部分(div, これがchildren[1])があり、このボタン部分に対するイベントの定義をJavaScript がやっています。

そしてそのイベントハンドラの中で stopCount を加算しています。

つまり、stopCount が増えるのは スロットのストップボタンが押されたとき です。

投稿2018/10/03 01:18

tacsheaven

総合スコア13703

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

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

takey

2018/10/03 01:23

たしかに!スロットマシンぽいですね…
ryoo_chksl

2018/10/03 01:35

回答ありがとうございます。 そうです。スロットマシンです。 ドットインストールを使ってJavaScriptを学習中なのですが、その中のスロットマシンを作る動画の中で分からない部分があったので質問させていただきました。
guest

0

for が3回まわった後で、<div class="stop" data-index="0">STOP</div> <div class="stop" data-index="1">STOP</div> <div class="stop" data-index="2">STOP</div> をクリックしたタイミングです。

投稿2018/10/03 01:12

編集2018/10/03 01:13
kei344

総合スコア69400

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

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

ryoo_chksl

2018/10/03 01:27

イメージとしては、forが3回まわることで、クリックイベントを発生させる準備が整って、クリックされるごとにstopCountが1ずつ増えていく、という感じですか?
takey

2018/10/03 01:30

そのイメージでOKだと思います。
kei344

2018/10/03 01:31

そうですね。提示されたコードでは同じボタンを3回押しても checkResults(); が実行されます。
tacsheaven

2018/10/03 01:36

ですね。一度押したボタンが押せなくなっているならこれでも問題はないのですが、そのロジックはclick のイベントハンドラにありませんし。
guest

0

<div class="stop" data-index="0">STOP</div>
<div class="stop" data-index="1">STOP</div>
<div class="stop" data-index="2">STOP</div> がクリックされた時です。
addEventListenerは指定したイベントが起きた時に実行する処理を指定するものです。
指定されているイベントは第一引数で指定されているclickということになります。

投稿2018/10/03 01:21

編集2018/10/03 01:22
root_jp

総合スコア4666

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

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

0

ベストアンサー

一つ一つ理解していきましょう。

stopCount++ が実行されるのは以下の関数が実行されたときです。

function() { clearTimeout(timers[this.dataset.index]); stopCount++; if (stopCount === panels.length) { stopCount = 0; checkResults(); } }

ではこの関数がどんなときに呼ばれるか、ということが重要になりますが、 addEventListener という半数の引数になっていることがわかりますか?

panels[i].children[1].addEventListener('click', function() {...});

イベントリスナー、という言葉はご自身で調べていただくとして、 panels[i].children[1] がクリックされたときにこの関数を呼び出してください、と宣言しておく仕組みになります。

panels[i].children[1] が何を意味するのか、考えてみてください。

投稿2018/10/03 01:16

mather

総合スコア6753

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

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

ryoo_chksl

2018/10/03 01:27

イメージとしては、forが3回まわることで、クリックイベントを発生させる準備が整って、クリックされるごとにstopCountが1ずつ増えていく、という感じですか?
mather

2018/10/03 01:57

クリックイベントはイベントリスナーが無くても発生しているので、より正しくは「クリックイベントに対して処理するべき関数の定義ができて」クリックするごとに処理が実行される形になります。
guest

0

このfor文は<div class="stop" data-index="0">STOP</div>をクリックしたときのイベントを登録しているだけなので、このfor文の中ではstopCountの値は増えません。

img/seven.pngの画像をクリックしたときにstopCountの値が1ずつ増えます(stopCount++;)。
画像は3つあると思いますが、3つすべてクリックしたらcheckResults();処理に入ります。

投稿2018/10/03 01:17

takey

総合スコア312

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問