![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
以前、別で下記のような質問がありました。
●質問-------------------
複数の同じ画像があるとします。
そのひとつをクリックすると画像が変わるようにします。
その後別の画像をクリックすると先ほどクリックした画像が初期の状態に戻るようにしたいのですが、どのような記述にすればよいのでしょうか?
どなたかご教授おねがいします。
----------------------
上記の質問を受けての回答が下記のような感じで
●回答-------------------
<script>
function change(obj){
var orgimg="a.gif";
var newimg="b.gif";
var imgs=document.getElementsByTagName('img')
for(var i=0;i<imgs.length;i++){
if(imgs[i].className==obj.className){
if(imgs[i]==obj) imgs[i].src=newimg;
else imgs[i].src=orgimg;
}
}
}
</script>
<img src="a.gif" class="hoge" onClick="change(this)">
<img src="a.gif" class="hoge" onClick="change(this)">
<img src="a.gif" class="hoge" onClick="change(this)">
----------------------
これで終わってしまっていたのですが、画像が複数のパターンある場合はどのようにすればよいでしょうか。
例えば
「a1.gif」をクリックすると「a2.gif」に変更するようにして、さらに「b1.gif」というものがあって、クリックすると「b2.gif」に変更するように設定してあるとします。
「a1.gif」をクリックして「a2.gif」になっている状態で「b1.gif」をクリックすると「a2.gif」が「a1.gif」に戻るようにするにはどのようにすればよいでしょうか。
このb1が、c1,d1,e1・・・・とたくさんある感じです。
質問の内容がわかりづりかもしれませんが、どなたかご教示いただけると幸甚です。
宜しくお願い申し上げます。
No.6ベストアンサー
- 回答日時:
クリックで変更したい画像("a1.gif","a2.gif","a3.gif","b1.gif","b2.gif","b3.gif"... )は、一箇所にまとまっているとします。
(つまりこの間には、他の画像が含まれない)。
その場合、画像を <div id="hoge_range">...</div> で囲います。
-----------------------------------------------------------------------
<div id="hoge_range">
<img src="a1.gif" class="hoge" onClick="change(this)">
<img src="a2.gif" class="hoge" onClick="change(this)">
<img src="a3.gif" class="hoge" onClick="change(this)">
</div>
-----------------------------------------------------------------------
また、JavaScriptを下記のように変更します。
-----------------------------------------------------------------------
<script language="JavaScript">
<!--
var class_na = "hoge";
var img1 = new Array("a1.gif","a2.gif","a3.gif");
var img2 = new Array("b1.gif","b2.gif","b3.gif");
var flag= new Array(0,0,0);
var targets= new Array();
function change(obj){
var hoge_range = document.getElementById('hoge_range');
var targets = hoge_range.getElementsByTagName('img');
for(var i=0;i<targets.length;i++){
if(targets[i]==obj && flag[i]==0){
targets[i].src=img2[i];
flag[i]=1;
} else {
if (flag[i]==1) {
targets[i].src=img1[i];
flag[i]=0;
}
}
}
}
// -->
</script>
-----------------------------------------------------------------------
これでやってみてください。
auty様
何度も丁寧にご回答頂き誠にありがとう御座いました。
何とか解決することができました。
本当に困っていたので、とても助かりました。
私も もう少しjavascriptを勉強したいと思います。
No.5
- 回答日時:
"a1.gif","a2.gif","a3.gif","b1.gif","b2.gif","b3.gif"... にのみ、
クラス属性 class="hoge"
を付けるということであれば、
if(imgs[i].className==obj.className){
を
if(imgs[i].className=="hoge"){
に変更すればよいと思います。
またまた回答有難うございます!!だんだん理想のものに近づいてきているような気がします。
っというか全くJavascriptを理解していなくて申し訳ない感じがしてきます。
これまで「auty」様にご教示いただいた方法ですと、ページの一番前(HTMLソース上で一番最初)にある場合は動作するのですが、今回のクリックで変更したい画像("a1.gif","a2.gif","a3.gif","b1.gif","b2.gif","b3.gif"... )よりもHTMLソース上で前に他の画像がある場合はうまいこと動かなくなってしまっているようです。
これの解決方法はありますでしょうか。。。
何度も何度も申し訳ありませんがご教示いただけると幸甚です。
宜しくお願いします。
No.4
- 回答日時:
[追記]
画像の数が多い場合は、
imgs[i].src=img1[i];
flag[i]=0;
の部分を
if (flag[i]==1) {
imgs[i].src=img1[i];
flag[i]=0;
}
に変更してみてください。
有難うございます。
頂いたソースで、単独でファイルを作って試してみると出来ました。有難うございます。。。
ですが。。。
私がいま制作しているサイトに組み込もうとすると出来なくなってしまいます。。。
教えていただいたソースの場合 HTMLファイル内に"a1.gif","a2.gif","a3.gif","b1.gif","b2.gif","b3.gif"以外の画像があると動作しないのでしょうか。。。
No.3
- 回答日時:
各画像が変更されているかどうかのフラグ(flag)を記憶しておくことにしました。
また、関数changeの引数は、何がクリックされたかを示すobj一つにしてみました。
-----------------------------------------------------------------------
<head>
<script language="JavaScript">
<!--
var imgs=document.getElementsByTagName('img');
var img1 = new Array("a1.gif","a2.gif","a3.gif");
var img2 = new Array("b1.gif","b2.gif","b3.gif");
var flag= new Array(0,0,0);
function change(obj){
for(var i=0;i<imgs.length;i++){
if(imgs[i].className==obj.className){
if(imgs[i]==obj && flag[i]==0){
imgs[i].src=img2[i];
flag[i]=1;
} else {
imgs[i].src=img1[i];
flag[i]=0;
}
}
}
}
// -->
</script>
</head>
<body>
<img src="a1.gif" class="hoge" onClick="change(this)">
<img src="a2.gif" class="hoge" onClick="change(this)">
<img src="a3.gif" class="hoge" onClick="change(this)">
</body>
-----------------------------------------------------------------------
No.2
- 回答日時:
もとの場所とソースをグローバルに覚えておくというのはどうでしょう?
<script>
previmg=new Image();
number=0;
function change(obj,img){
var imgs=document.getElementsByTagName('img');
if(previmg.src!="") imgs[number].src=previmg.src;
for(var i=0;i<imgs.length;i++){
if(imgs[i].className==obj.className){
if(imgs[i]==obj){
previmg.src=obj.src;
number=i;
imgs[i].src=img;
}
}
}
}
</script>
<img src="a1.jpg" class="hoge" onClick="change(this,'a2.jpg')">
<img src="b1.jpg" class="hoge" onClick="change(this,'b2.jpg')">
<img src="c1.jpg" class="hoge" onClick="change(this,'c2.jpg')">
おお 有難うございます。
私の理想としているものに結構近づきました!!
もう一つなのですが、同じ画像を二回クリックすると元に戻る、「a2.gif」をもう一度クリックすると「a1.gif」にも戻るようにしたいのですが。。。
ご教示頂けますでしょうか。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_12.png?5a7ff87)
No.1
- 回答日時:
<html>
<body>
<img id="g0" src="a1.gif" onClick=chg()>
<img id="g1" src="b1.gif" onClick=chg()>
<img id="g2" src="c1.gif" onClick=chg()>
<img id="g3" src="d1.gif" onClick=chg()>
<img id="g4" src="e1.gif" onClick=chg()>
<script>
function chg(){
for(i=0;i<5;i++){
obj = document.getElementById('g'+i);
obj.src = obj.src.replace(/2/,'1');
}
obj = event.srcElement;
obj.src = obj.src.replace(/1/,'2');
}
</script>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- ノートパソコン Outlookメールで本文中のgif動画をDTに保存したい 3 2023/03/09 21:38
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPでの画像ファイル表示
-
HPビルダー12 Javascriptのロ...
-
画像クリックで画像変化を1ペー...
-
NNでロールオーバーしたgifアニ...
-
サムネイル画像をマウスオーバ...
-
2箇所の画像をランダムに複数表示
-
フォームに入力された値により...
-
教えて下さい。ランダムにバナ...
-
JavaScriptでボタンをクリック...
-
Excel VBA マクロ 画像(...
-
ランダムに画像を表示し、ポッ...
-
ロールオーバーとOnclickで
-
htmlで、たくさんのgif画像を、...
-
Javascriptでランダムに画像を...
-
画像をクリックすると音が鳴り...
-
c++std::string型をTCHARに変換...
-
Javascriptで画像を水面のよう...
-
jspでcssが読み込めない
-
MAX関数を使ってからLEFT JOIN...
-
読み込んだQRコードをフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPでの画像ファイル表示
-
c++std::string型をTCHARに変換...
-
画面が真っ白になるのはどうして?
-
C言語のポインタ表現
-
クリックして変更した画像を他...
-
ランダムに画像を表示し、ポッ...
-
フォームに入力された値により...
-
日替わりで画像を変更したい
-
javascriptで複数の画像をラン...
-
htmlで、たくさんのgif画像を、...
-
「戻る」「進む」ボタンで画像...
-
Excel VBA マクロ 画像(...
-
JavaScriptのhistory.back(戻...
-
診断の作り方
-
小さい写真にマウス置くと拡大...
-
JavaScriptでボタンをクリック...
-
サムネイルをクリックして背景...
-
ロールオーバー効果にならない。
-
クリックした自身の画像を別画...
-
MinGWでfreetypeのmake時に
おすすめ情報