dポイントプレゼントキャンペーン実施中!

こんにちは。
どうしても上手く行かないので教えてください。

マウスオーバー時とクリック時に背景画像を変更したいので、下記のように書いてみました。
初め、8つあるメニューのどこかが必ず、他のメニューとは違う背景画像になっていて(クリックしたときと同じ背景画像)、それはランダムで決まっていません。
たとえばデフォルトの画像がimg1.gif、変更画像がimg2.gifだとして、メニュー1の画像がimg2.gif、その他メニューはimg1.gifで、メニュー2をマウスオーバー(img2.gifに変更)、アウトしても、メニュー1の画像はimg2.gifのままで、メニュー2をクリックして初めて、メニュー1をimg1.gifに変更したいのです。

説明が下手で申し訳ありませんが、どなたかお知恵をお貸しいただけないでしょうか。わかりづらい点ありましたら補足いたします。
よろしくお願いいたします。

■JavaScript
var imgno = 8
var imgflag = new Array()
for(var i = 0 ; i < imgno ; i ++){
imgflag[i] = 0
}

function ResetIMG(m_flag,num){
if(m_flag == 'cl'){
for(var i = 0 ; i < imgno ; i ++){
if(i == num){
imgflag[num] = 1
}else{
imgflag[i] = 0
}
}
}

for(var i = 0 ; i < imgno ; i++){
if(imgflag[i] == 1){
document.getElementById("menu" + (i+1)).style.backgroundImage = "url(img1.gif)"
}else if(imgflag[i] == 0){
document.getElementById("menu" + (i+1)).style.backgroundImage = "url(img2.gif)"
}
}
if(m_flag == 'ov'){
document.getElementById("menu" + (num + 1)).style.backgroundImage = "url(img1.gif)"
}
}

■HTML
<A onclick="ResetIMG('cl',0)" onmouseover="ResetIMG('ov',0)" onmouseout="ResetIMG()" id="menu1">メニュー1</A>
<A onclick="ResetIMG('cl',1)" onmouseover="ResetIMG('ov',1)" onmouseout="ResetIMG()" id="menu2">メニュー2</A>
<A onclick="ResetIMG('cl',2)" onmouseover="ResetIMG('ov',2)" onmouseout="ResetIMG()" id="menu3">メニュー3</A>
<A onclick="ResetIMG('cl',3)" onmouseover="ResetIMG('ov',3)" onmouseout="ResetIMG()" id="menu4">メニュー4</A>
<A onclick="ResetIMG('cl',4)" onmouseover="ResetIMG('ov',4)" onmouseout="ResetIMG()" id="menu5">メニュー5</A>
<A onclick="ResetIMG('cl',5)" onmouseover="ResetIMG('ov',5)" onmouseout="ResetIMG()" id="menu6">メニュー6</A>
<A onclick="ResetIMG('cl',6)" onmouseover="ResetIMG('ov',6)" onmouseout="ResetIMG()" id="menu7">メニュー7</A>
<A onclick="ResetIMG('cl',7)" onmouseover="ResetIMG('ov',7)" onmouseout="ResetIMG()" id="menu8">メニュー8</A>

A 回答 (2件)

・ 意図が掴めてないかも知れませんが、



>>> 初め、8つあるメニューのどこかが必ず、他のメニューとは違う背景画像になっていて

これをするだけなら、
for(var i = 0 ; i < imgno ; i ++){
imgflag[i] = 0
}

var selNo = Math.floor(imgno*Math.random());
for (var i = 0; i < imgno; i++) {
imgflag[i] = (i==selNo) ? 1 : 0;
}

window.onload = ResetIMG;

とするだけでよいでしょう。

・ 以下は、yambejp様を参考に作って見ました。

------------------------------------------------------------
<html>
<head>
<style>
#menu a {
background-Image: url(img1.gif);
}

#menu a:hover{
background-Image: url(img2.gif);
}
</style>

<script type="text/javascript">
<!--
var selObj;

window.onload = function () {
var menuItems = document.getElementById("menu").getElementsByTagName("A");
var selNo = Math.floor(menuItems.length * Math.random());

for (var i = 0; i < menuItems.length; i++) {
menuItems[i].onclick = clickfunc;
if (i == selNo) {
selObj = menuItems[i];
selObj.style.backgroundImage = "url(img2.gif)";
}
}
};

function clickfunc() {
selObj.style.backgroundImage = "url(img1.gif)";
selObj = this;
selObj.style.backgroundImage = "url(img2.gif)";
}

//-->
</script>
</head>
<body>
<div id="menu">
<a href="#">メニュー1</a>
<a href="#">メニュー2</a>
<a href="#">メニュー3</a>
<a href="#">メニュー4</a>
<a href="#">メニュー5</a>
<a href="#">メニュー6</a>
<a href="#">メニュー7</a>
<a href="#">メニュー8</a>
</div>
<div></div>
</body>
</html>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
お礼が遅くなり申し訳ありません。

説明が下手で申し訳ありません。ランダムという言葉がいけなかったです。
記載したHTMLは、3分割(上・右・左)したフレームの、上のフレームになり、左フレームのリンクをクリックすると、それに該当する上メニューの色を変えたいのです。

私が書いたものだと、上フレームをクリックしている分にはいいのですが、左フレームリンクから上メニューをimg2に変えたあと(そこまではgetElementByIdでできています)、マウスオーバーすると、変わったimg2がimg1に戻ってしまうのです。他をクリックするまではimg2をキープしたいのです。

できれば教えていただいたような、今のJavaScriptをあまり変更せずにできるとうれしいです。
ご教授お願いいたします。

お礼日時:2008/07/07 12:30

まずメニューをdivでくくり、idを振る・・・これでだいぶ変わってきます。


さらにmouseoverとmouseoutはcssにかえる
onclickはスタイルをいじるのではなくclassを置き換えるようにする

そうじてこんな感じ・・・
//hoge.htm
<script type="text/javascript" src="hoge.js"></script>
<link rel="stylesheet" type="text/css" href="hoge.css">

<!--とりあえず6番をえらんでおく-->
<div id="menu">
<A href="#">メニュー1</A>
<A href="#">メニュー2</A>
<A href="#">メニュー3</A>
<A href="#">メニュー4</A>
<A href="#">メニュー5</A>
<A href="#" class="selected">メニュー6</A>
<A href="#">メニュー7</A>
<A href="#">メニュー8</A>
</div>

//hoge.css
#menu a{
background-Image:url(img1.gif);
}
#menu a:hover,#menu a.selected{
background-Image:url(img2.gif);
}

//hoge.js
window.onload=function(){
var tags=document.getElementsByTagName("a");
for(var i=0;i<tags.length;i++){
if(tags[i].parentNode.id=="menu"){
tags[i].onclick=clickfunc;
}
}
}
function clickfunc(){
var n=this.parentNode.firstChild;
while(n){
if(n.nodeName=="A" && n.className!=""){
n.className="";
}
if(this==n) n.className="selected";
n=n.nextSibling;
}
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
遅くなって申し訳ありません。

divとidはどちらも設定済みでした!
教えていただいたとおりで、希望していたように動くのですが、
実はこのほかにも関連するファイルがいくつかありまして、それと一緒だとどうしても上手くいきません。
他に設定しているJavaScriptやCSSのせいかもしれないです・・・。

上記で記載したHTMLは、3分割した(上・右・左)フレームの、上の部分なんです。以前yambejpさんに教えていただいたgetElementByIdも踏まえて作りたいので、もともとのJavaScriptをあまり壊さずにというのは難しいでしょうか・・・。

お礼日時:2008/07/07 12:18

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