javascript初心者です。
↓下記のように画像がsetTimeoutで切り替わるスクリプトを書いているのですが、
http://foofoo77.web.fc2.com/imagechange/index6b. …
このページの記述では、後読みの方の右側は動いているのですが、左側は動きません。
この処理を同一ページ内の二箇所でしたいのですが、どのようにすればいいでしょうか?
制約としては
二箇所を同じ関数を使ってそれぞれ違う引数を与えるのみで動かさなければなりません。
画像を変更する要素のidの値を引数としています。
同一関数を使って二箇所を処理するのは無理なのでしょうか?
ソースは下記のようになります(上部URLと同じものです)。
お分かりになる方いらっしゃいましたら、ご回答よろしくお願いいたします。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>一定時間で変わる画像</title>
<script type="text/javascript">
<!--
//画像プリロード
var j=1;
function preLoad(ch) {
c = ch;
animeImg = new Array();
for (i=1;i<6;i++){
animeImg[i]=new Image();
animeImg[i].src="images/"+c + i + ".gif";
};
}
//時間制御
wait = new Array(
3000,
3000,
3000,
500,
500,
500,
500,
500,
3000
);
var fnum=0;
//表示画像制御
function change(ch) {
var obj = document.getElementById(ch);
obj.src=animeImg[j].src;
j++;
if (j>5){
j=1;
}
if(fnum<4){
fnum++;
}
else {
fnum=0;
}
wtime=wait[fnum];
//console.log(wtime);
setTimeout("change(b)",wtime);
b = ch;
}
//-->
</script>
</head>
<body>
<img src="images/image1.gif" name="animation" height="500" width="500" id="bb">
<script type="text/javascript">
preLoad('image');
change('bb');
</script>
<img src="images/imageb1.gif" name="animation" height="500" width="500" id="cc">
<script type="text/javascript">
preLoad('imageb');
change('cc');
</script>
</body>
</html>
No.2ベストアンサー
- 回答日時:
質問のソースコードがなぜ動かないのかはコードを比較して判断頂くとして。
この場合、カウンタ変数(j, fnum)を共有する、とちと面倒なことになりますよね。
与えられた引数(id)を使って各々にカウンタ変数(プロパティ)を持たせてやればいいんじゃないでしょうか。
var animeImg = {};
//画像プリロード
function preLoad(ch) {
var img;
for (var i = 0; i < 5; i++) {
img = new Image();
img.src = "images/" + ch + i + ".gif"; // 0 ~ 4.gif(0 から始まる数値に変更しています)
}
// 与えられた引数を使いカウンタ用プロパティを設定
animeImg[ch] = { j: 0, fnum: 0 };
}
//時間制御
var wait = new Array( 3000, 3000, 3000, 500, 500, 500, 500, 500, 3000 );
//表示画像制御
function change(ch) {
var obj = document.getElementById(ch);
var data = animeImg[ch];
obj.src = "images/" + ch + data.j + ".gif";
data.j++;
if (data.j > 4) {
data.j = 0;
}
if (data.fnum < 4) {
data.fnum++;
} else {
data.fnum = 0;
}
var wtime = wait[data.fnum];
//console.log(wtime);
setTimeout(function() { change(ch); }, wtime);
}
<img src="images/image0.gif" id="image">
<script type="text/javascript">
preLoad('image');
change('image');
</script>
<img src="images/imageb0.gif" id="imageb">
<script type="text/javascript">
preLoad('imageb');
change('imageb');
</script>
ご回答ありがとうございます。
教えていただいたソースを元にして書いてみましたら、ばっちり希望通りの挙動をしました。
与えた引数の各々に対してカウンタ変数を持たせなければいけなかったのですね。
書き方などを含め、大変参考になりました。
ありがとうございました。
No.1
- 回答日時:
getElementByIdを使われていますが、全てのDOMの読み込みが終わらない段階で実行されているため、期待した順番通りに処理がされていないのだと思います。
onload後に実行すれば動きませんか?
window.onload=function(){
preLoad('image');
change('bb');
preLoad('imageb');
change('cc');
}
ご回答ありがとうございます。
window.onloadで試してみたのですがうまくいきませんでした。
でも参考になりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日替わりで画像を変更したい
-
画面が真っ白になるのはどうして?
-
NNでロールオーバーしたgifアニ...
-
htmlで、たくさんのgif画像を、...
-
「戻る」「進む」ボタンで画像...
-
MAX関数を使ってからLEFT JOIN...
-
javascriptで毎月替わる画像
-
HTMLで条件分岐はできますか?
-
HTMLですCSSです 画像のように...
-
アップロードファイルの種類に...
-
Slick.jsのオプションrtlについて
-
スタイルシートで画面を上下に...
-
大分類・中分類・小分類
-
textareaに画像を表示したい
-
javascriptテキストBOX色を元に...
-
CSS <div>の入れ子が反映さ...
-
jQueryでサーバー上のファイル...
-
デフォルト非表示にしたい。【t...
-
【javascript で動的に a タグ...
-
背景色を透明化
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c++std::string型をTCHARに変換...
-
画面が真っ白になるのはどうして?
-
JSPでの画像ファイル表示
-
C言語のポインタ表現
-
javascriptの sx, sy, sw, sh, ...
-
VBScriptで画像を切り替え。
-
画像をクリックすると音が鳴り...
-
フォームに入力された値により...
-
OpenCVを用いたヒストグラムの...
-
クリックした自身の画像を別画...
-
日替わりで画像を変更したい
-
時間で背景の画像を変更したい...
-
javascriptで複数の画像をラン...
-
2箇所の画像をランダムに複数表示
-
ロールオーバー効果にならない。
-
eclipse+Tomcatでのファイルパ...
-
Excel VBA マクロ 画像(...
-
サムネイルをクリックして背景...
-
ランダム表示の画像位置
-
JavaScriptのhistory.back(戻...
おすすめ情報