プロが教える店舗&オフィスのセキュリティ対策術

Aボタンを押すとBの画像が切り替わり、もう一度Aボタンを押すと元の画像に戻るという
ものを作っています。

こちらのページで色々調べて、下記のようなスクリプトを使いました。

<SCRIPT language="JavaScript">
<!--
num = 2; // 入れ替える画像の枚数
cnt = 0;
img0='images/img01.gif';
img1='images/img02.gif';

function changeImage1() {
cnt++;
if( (cnt % num) == 0) {
document.gazou1.src = img1;
}
else{
document.gazou2.src = img0;
}
}


num = 2; // 入れ替える画像の枚数
cnt = 0;
img2='images/plan/img03.gif';
img3='images/plan/img04.gif';

function changeImage2() {
cnt++;
if( (cnt % num) == 0) {
document.gazou3.src = img2;
}
else{
document.gazou4.src = img3;
}
}

//-->
</SCRIPT>


<img src="images/img01.gif" name="gazou1" onClick="JavaScript:changeImage1()">

<br>

<img src="images/img03.gif" name="gazou1" onClick="JavaScript:changeImage2()">



でも、クリックしても切り替わらない時があり、複数クリックしないといけません。
一回で切り替わる時もあります。

ページ内に、画像違いで同じ物が2つ設置してあり上手くいかないのかと思うのですが・・・


どなたかお分かりになる方がいらっしゃいましたら、教えてください。
宜しくお願いします。

A 回答 (3件)

画像の切り替えはImageオブジェクトを使うのが一般的



ざっとこんな感じ
<script>
var imgs=[
[(new Image()),new Image()]
,[new Image(),new Image()]
];
imgs[0][0].src="1.jpg";
imgs[0][1].src="2.jpg";
imgs[1][0].src="3.jpg";
imgs[1][1].src="4.jpg";
function changeImg(obj,num){
obj.src=(obj.src==imgs[num][0].src)?imgs[num][1].src:imgs[num][0].src;
}
</script>


<img src="1.jpg" onclick="changeImg(this,0)">
<img src="3.jpg" onclick="changeImg(this,1)">
    • good
    • 0
この回答へのお礼

とても早いご回答ありがとうございました。
こちらのスクリプトで無事に動きました。
初心者の私にも分かりやすいシンプルなスクリプトで
ありがたかったです。
ベストアンサーに選ばせていただきました。

お礼日時:2015/09/13 02:10

<img> の中に、切り替わる画像URLを列挙できる、汎用的なサンプル



<script>
window.addEventListener('click', function(ev){
var e = ev.target;
while (e && !/\bclickflap\b/.test(e.className)) e = e.parentNode;
var flap = function(img) {
var list = img.getAttribute('data-list').split(/\s*,\s*/), n = list.length;
var point = 0, src = img.getAttribute('src');
for (var i=0; i<n; i++) if (src == list[i]) point = (i + 1)%n;
img.src = list[point];
};
if (e && e.tagName == 'IMG') ev.preventDefault(), flap(e);
if (e && e.tagName == 'A' && e.hash) ev.preventDefault(), flap(document.getElementById(e.hash.substr(1)));
}, false);
</script>

A画像クリックで、B画像が切り替わる例
<a class=clickflap href=#gazou1><img src=A.png></a><img id=gazou1 src=B1.png data-list="B1.png, B2.png">
<a class=clickflap href=#gazou2><img src=A.png></a><img id=gazou2 src=B3.png data-list="B3.png, B4.png, images/B5.png">

B画像クリックで、B画像が切り替わる例
<img src=B1.png class=clickflap data-list="B1.png, B2.png">
<img src=B4.png class=clickflap data-list="B3.png, B4.png, images/B5.png">
    • good
    • 0
この回答へのお礼

とても丁寧にありがとうございました。
再度、勉強させていただきます!

お礼日時:2015/09/13 02:04

う~~んと・・・



>Aボタンを押すとBの画像が切り替わり~~
ボタンらしきものがありませんが、画像をクリックするとその画像が切り替わるということで良いのでしょうか?

ご提示のサンプルだと、
imgタグに同じname=gazou1となっているので、nameだけでは区別できなくなっています。
また、HTMLにはgazou1しかないのに、スクリプトにはgazou1~gazou4まで記述されていて、何だか変ですね。

きっと、画像が切り替わるものを2つ設置したいのかなと想像しましたが、その際に、スクリプト内の変数のcntやnumが両方共用になっちゃってますので、処理中に混乱が起きませんか?
個別に処理をなさりたければ、変数も変えておかないとうまくないです。
(互いに関連を持った処理であるなら別ですが)


すでにNo1様がノーマルな回答をなさっていますので、すこし違うものを・・・
(こんなのでも可能と言う参考に。ただし画像の先読みはしていません。)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>sample</title>
<meta http-equiv="Content-Script-Type" content="text/javascript">
</head>

<body>
<p><img src="A.jpg" id="gazou1">
<p><img src="img/photo01.jpg" id="gazou2">
<p><img src="img1.gif" id="gazou3">


<script type="text/javascript">

//(画像のid、uriの配列)のセットで画像チェンジを設定
imageChanger("gazou1", ["A.jpg", "B.jpg", "C.jpg"]);
imageChanger("gazou2", ["img/photo01.jpg", "img/photo02.jpg"]);
imageChanger("gazou3", ["img1.gif", "img2.gif", "img3.gif", "img4.gif"]);


function imageChanger(id, uris){
var t = document.getElementById(id);
var c = 0, n = uris.length;
t.onclick = function(){ t.src = uris[ c = ++c % n]; }
}
</script>
</body>
</html>
    • good
    • 0
この回答へのお礼

読み返してみると、意味の分からない質問でしたね。
出来なくて焦っていたもので、すみません・・・。

こちらの方法もあるんですね。
当てはめて勉強させていただきます。
ありがとうございました。

お礼日時:2015/09/13 02:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!