こんにちは。
どうしても上手く行かないので教えてください。
マウスオーバー時とクリック時に背景画像を変更したいので、下記のように書いてみました。
初め、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件)
- 最新から表示
- 回答順に表示
No.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>
ご回答ありがとうございます。
お礼が遅くなり申し訳ありません。
説明が下手で申し訳ありません。ランダムという言葉がいけなかったです。
記載したHTMLは、3分割(上・右・左)したフレームの、上のフレームになり、左フレームのリンクをクリックすると、それに該当する上メニューの色を変えたいのです。
私が書いたものだと、上フレームをクリックしている分にはいいのですが、左フレームリンクから上メニューをimg2に変えたあと(そこまではgetElementByIdでできています)、マウスオーバーすると、変わったimg2がimg1に戻ってしまうのです。他をクリックするまではimg2をキープしたいのです。
できれば教えていただいたような、今のJavaScriptをあまり変更せずにできるとうれしいです。
ご教授お願いいたします。
No.1
- 回答日時:
まずメニューを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;
}
}
ご回答ありがとうございます。
遅くなって申し訳ありません。
divとidはどちらも設定済みでした!
教えていただいたとおりで、希望していたように動くのですが、
実はこのほかにも関連するファイルがいくつかありまして、それと一緒だとどうしても上手くいきません。
他に設定しているJavaScriptやCSSのせいかもしれないです・・・。
上記で記載したHTMLは、3分割した(上・右・左)フレームの、上の部分なんです。以前yambejpさんに教えていただいたgetElementByIdも踏まえて作りたいので、もともとのJavaScriptをあまり壊さずにというのは難しいでしょうか・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- その他(ソフトウェア) Emacsメニューの日本語化について 1 2023/06/16 15:52
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
[急ぎ] videoタグで埋め込んだm...
-
console.log結果をhtmlで表示し...
-
javascriptテキストBOX色を元に...
-
複数のリンク画像を一定時間で...
-
クリックで色変更後に既に変更...
-
一部のjavascriptがfirefoxで効...
-
getElementByIdの戻り値がnull...
-
指定したパスが現URLに含まれて...
-
javascriptで文章を一文字ずつ...
-
createElementで作成した要素を...
-
IFRAMEの表示/非表示を切り替え...
-
背景色を透明化
-
HTML id名とjavascript変数名
-
innerHTMLで、関数での記載内容...
-
クリックするとテーブルの列の...
-
jQueryでクリックされた要素のi...
-
dblclickでdiv要素を一回だけ作...
-
【CSS】floatで左右に並べた...
-
jspでcssが読み込めない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
createElementで作成した要素を...
-
removeEventListenerについて
-
タブで開いてさらにタブ内をア...
-
IFRAMEの表示/非表示を切り替え...
-
変数名をどのようにつけるのが...
-
表示・非表示のスクリプトで、...
-
クリックで色変更後に既に変更...
-
jQueryでクリックされた要素のi...
-
HTMLとJavaScriptで作ったタイ...
-
console.log結果をhtmlで表示し...
-
HTMLタグに複数のクラスを設定...
-
指定したパスが現URLに含まれて...
-
iframe内のリンクが飛ばないの...
-
背景色を透明化
-
変数内容をHTML内で表示する方法
-
テキストエリア内の一部の文字...
-
classの中の<a>タグにidを追加
おすすめ情報