javascriptの初心者です。
サンプルコードを使って勉強しているので、
フラグの使われ方について質問があります。
下にあるコードは、
4枚縦並びになった写真を、ボタンで1枚ずつスライドするスクリプトです。
その中にあるflag変数は、おそらくボタンを2度押しした時に、
一気に2枚スライドをするのを防ぐための、関数使用中を示す変数と思います。
ここで2つ質問です。
●flag変数はここでは、何を表してますか?
●initable関数を抜ける前、後、どちらでスライド動作をしていますか?
----私の考え方(思い込み?)------------
このコードでちゃんと画像がスライドするのですが、
flag = ture とする場所が遅すぎる感じがします。
というのも、
slidetable関数の中に、ifがあるので
その条件がクリアするまで、関数から抜けだせません。
やっと抜けだしてはじめて、flag = trueと設定する。
flag変数が、使用中を表すものだとしたら、
スライド関数に行く前に、flag = tureとして、
「関数は使用中なので、今クリックしてもreturnしますよ」とさせるのでないか?
実際は、どのタイミングで動き出すものかよくわかりません。
chromeでブレークポイントを作って、
1つずつ動かすと、initableを抜けだした後に、
HTMLコードの所に移動したぞ。
この流れだったら、納得するけど。。。
---------------------------
スライド関数の処理は
とりあえずどんな処理をするか受け付ける。(まだ動き出さない)
↓
flag =tureとして、inittable関数を抜けだして
↓
動かす場所に、処理を一気に適用。
---------私の考え方(思い込み?)以上------------
--------------------------------------------
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>東京の風景</title>
<script type="text/javascript">
<!--
var tablemax = 4;
var tablewidth = 260;
var step = 14;
var num = 0;
var offset = 0;
var flag = false;
function inittable(n){
if (flag) return;
num += n;
if (num < 0) { num = 0; return; }
if (num >=tablemax) { num = tablemax-1; return; }
offset = n * step;
count = tablewidth / step;
slidetable();
flag = true;
}
function slidetable(){
imgtables.style.pixelLeft -= offset;
count--;
if (count > 0) setTimeout("slidetable()",10); else flag = false;
}
-->
</script>
</head>
<body>
<img src="left.gif" onMousedown="inittable(-1)" style="position:absolute;top:220px;left:20px;">
<img src="right.gif" onMousedown="inittable(1)" style="position:absolute;top:220px;left:60px;">
<div style="position:absolute;top:10px;left:10px;clip:rect(0px 260px 200px 0px)">
<table id="imgtables" border="0" cellspacing="0" cellpadding="0" style="position:absolute;top:0px;left:0px;">
<tr>
<td>
<table bgColor="#ccccff" width="260">
<tr><td >東京フォト(1)</td></tr>
<tr><td><img src="pic1.jpg" width="260" height="200"></td></tr>
</table>
</td>
<td>
<table bgColor="#ccccff" width="260">
<tr><td>東京フォト(2)</td></tr>
<tr><td><img src="pic2.jpg" width="260" height="200"></td></tr>
</table>
</td>
<td>
<table bgColor="#ccccff" width="260">
<tr><td>東京フォト(3)</td></tr>
<tr><td><img src="pic3.jpg" width="260" height="200"></td></tr>
</table>
</td>
<td>
<table bgColor="#ccccff" width="260">
<tr><td>東京フォト(4)</td></tr>
<tr><td><img src="pic4.jpg" width="260" height="200"></td></tr>
</table>
</td>
</tr>
</table>
</div>
</body>
</html>
No.1ベストアンサー
- 回答日時:
> slidetable関数の中に、ifがあるので
> その条件がクリアするまで、関数から抜けだせません。
> やっと抜けだしてはじめて、flag = trueと設定する。
forやwhileじゃなくてifですよ?
> if (count > 0) setTimeout("slidetable()",10); else flag = false;
countが0より大きければ setTimeout("slidetable()",10); が実行されますが、それだけです。
関数はすぐに抜けます。
> ●flag変数はここでは、何を表してますか?
推測されているとおりビジー(動作中)フラグだと思います。
> ●initable関数を抜ける前、後、どちらでスライド動作をしていますか?
最初の1stepだけは抜ける前。
後は抜けた後。
適当な所にalertでも挿入すれば分かるはず。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定<table>内の<td>の色を変える
-
至急!GetElementById でtdの...
-
HTML中のTABLEのデータを抽出す...
-
プルダウンで選択すると、DBの...
-
ハイパーリンクを別ウインドウ...
-
別ページからOnclickでテーブル...
-
javascript クリックすると、あ...
-
チェックボックスにチェックが...
-
テキストだけonCllickを検知したい
-
JavaScriptで特定のtdタグにcla...
-
テキストの再表示
-
スクロールバーの表示位置を変...
-
テーブル列の表示・非表示機能...
-
▲▲JavaScriptに詳しい人見てく...
-
表内の列や行の結合に関して
-
データバインドで生成したテー...
-
javascriptで指定するtrを削除...
-
JavaScriptでテーブルをクリッ...
-
jqueryとscriptでTABLEのセルを...
-
return trueとreturn falseの用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハイパーリンクを別ウインドウ...
-
特定<table>内の<td>の色を変える
-
JavaScriptで特定のtdタグにcla...
-
プルダウンで選択すると、DBの...
-
【UWSC】HTML内のある部分を抽...
-
tableの任意行にfocusをあてる
-
至急!GetElementById でtdの...
-
一覧から選択した行の行番号を...
-
マウスをブラウザの外に出した...
-
Selenium.ChromeDriverの使い方...
-
「オブジェクトは、このプロパ...
-
リンク色の変更
-
スクロールバーの表示位置を変...
-
テーブルで複数行をまとめて非...
-
Excelで作ったhtmlファイルのサ...
-
チェックボックスにチェックが...
-
JavaScriptでテーブルの行入れ替え
-
テーブル内に表示されている数...
-
【JQuery】テーブルで行選択さ...
-
階層式メニューをtableタグ内に
おすすめ情報