http://wakabano.cool.ne.jp/dream/useful/snippets …
↑のページを参考に、特定の要素の背景色を一定時間ごとにランダム変化するJavascriptを考えた末、以下のようになりました。
function ChangeBg(){
var r,g,b;
r = decToHex(randomNumber(256)-1);
g = decToHex(randomNumber(256)-1);
b = decToHex(randomNumber(256)-1);
if(document.getElementById){
document.getElementById('vector').style.backgroundColor= "#" + r + g + b ;
T_ID=setTimeout("ChangeBg()",30000);
}
else{
if(document.all){
document.all('vector').style.backgroundColor= "#" + r + g + b ;
T_ID=setTimeout("ChangeBg()",30000);
}
}
}
function randomNumber(limit){
return Math.floor(Math.random()*limit);
}
function decToHex(dec)
{
var hexStr = "0123456789ABCDEF";
var low = dec % 16;
var high = (dec - low)/16;
hex = "" + hexStr.charAt(high) + hexStr.charAt(low);
return hex;
}
これに、<body onLoad="ChangeBg()">と書いて、30秒ごとにid名が「vector」の<div>要素の背景色を変化させることには成功したのですが、たとえばclass名が同じ複数の<div>要素の背景色を一定時間ごとに変化させることは可能でしょうか。また、<body onLoad="ChangeBg('abc')">のように、id名をhtmlから指定する場合はどうすればいいのでしょうか。
前者は全くやり方がわからなくて、後者は四苦八苦した末、ページロード時にランダムに変わるのみで、その後は変化しませでした。
No.5ベストアンサー
- 回答日時:
[修正]
<<< そのソースをコピーしてテストすると時々色が取れなくて色指定エラーが出るようです。
arexis氏のご指摘のように、わたしもサンプルのrandomメソッドの扱いに疑問を持っていましたので、
一言追記します。
Math.random(256)のreturn値は、
0<= Math.random(256) <256
ですが、しばしば(1/256の確率で) 1未満の値をとることがあります。このとき
Math.floor(Math.random()*limit)
は、 値0をとります。すると
decToHex(randomNumber(256)-1)
は、-1となり、関数decToHex(dec)は、2文字ではなく、1文字を返すことになり、
tag.style.backgroundColor= "#" + r + g + b ;
がうまく行きません。したがって
decToHex(randomNumber(256)-1)
ではなく
decToHex(randomNumber(256))
としたほうがいいでしょう。
No.4
- 回答日時:
<<< そのソースをコピーしてテストすると時々色が取れなくて色指定エラーが出るようです。
arexis氏のご指摘のように、わたしもサンプルのrandomメソッドの扱いに疑問を持っていましたので、
一言追記します。
Math.random(256)のreturn値は、
0<= Math.random(256) <256
ですが、極稀にでも 0の値をとることがあります。このとき
decToHex(randomNumber(256)-1)
は、-1となり、関数decToHex(dec)は、2文字ではなく、1文字を返すことになり、
tag.style.backgroundColor= "#" + r + g + b ;
がうまく行きません。したがって
decToHex(randomNumber(256)-1)
ではなく
decToHex(randomNumber(256))
としたほうがいいでしょう。
No.3
- 回答日時:
<html>
<head><style>.red{background-color:#f00;}</style></head>
<body>
<div class="red">a</div>
<div id="abc">サイケヘ、゛、ヌ、ヒ</div>
<div class="red">c</div>
0xFFFFFF = 256*256*256-1 =16777215
</div>
</body>
<script>
setInterval("chgbk('red')",1000);
setInterval("chgbkID('abc')",2000);
function chgbk(cn){
o=document.getElementsByTagName('DIV');
c=Math.floor(Math.random()*16777215);
for(i=0;i<o.length;i++){if(o[i].className==cn) o[i].style.backgroundColor=c;}
}
function chgbkID(id){
document.getElementById(id).style.backgroundColor=Math.floor(Math.random()*16777215);
}
</script>
</html>
No.2
- 回答日時:
そのソースをコピーしてテストすると時々色が取れなくて色指定エラーが出るようです。
色のとり方も含めて書き換えてしまいました。
複数箇所の意味が、複数箇所を同じ色で と解釈。
BODY の onload 記述から指定をする方法として
■IDの場合
<html>
<head>
<script type="text/javascript">
function ChgBG(){
function $(id){ return document.getElementById? document.getElementById(id) : (document.all? document.all(id) : null); }
var ids = arguments;
function TimeLoop(){
var col= '#';
for(var i=0; i<6; i++){ col += parseInt(Math.random()*16,10).toString(16); }
for(var j=0; j<ids.length; j++){ $(ids[j]).style.backgroundColor = col; }
T_ID = setTimeout(TimeLoop,1000);
}
TimeLoop();
}
function StopChg(){ clearTimeout(T_ID) }
</script>
</head>
<body onload="ChgBG('vector','yahoo')">
<div id="vector" style="width:200px; height:50px;"></div>
<br>
<div id="yahoo" style="width:200px; height:50px;"></div>
</body>
</html>
複数のIDを bodyタグのonloadから指定可能な物。
1つならChgBG(id)、複数なら ChgBG('id','id','id') の様に必要なだけ引数として渡す。
■クラス名の場合
<html>
<head>
<script type="text/javascript">
function ChgBG(){
var classes= ',';
for(var i=0; i<arguments.length; i++){ classes += arguments[i] + ','; }
var tags= document.body.getElementsByTagName("*");
var tg = new Array();
for(var j=0; j<tags.length; j++){ if(classes.match(','+ tags[j].className +',')){ tg.push(tags[j]) } }
function TimeLoop(){
var col= '#';
for(var i=0; i<6; i++){ col += parseInt(Math.random()*16,10).toString(16); }
for(var j=0; j<tg.length; j++){ tg[j].style.backgroundColor = col; }
T_ID = setTimeout(TimeLoop,1000);
};
TimeLoop();
}
function StopChg(){ clearTimeout(T_ID) }
</script>
</head>
<body onload="ChgBG('CB1','cb2')">
<div class="CB1" style="width:200px; height:50px;"></div>
<br>
<div class="CB1" style="width:200px; height:50px;"></div>
<br>
<div class="cb2" style="width:200px; height:50px;"></div>
</body>
</html>
複数のクラス名を bodyタグのonloadから指定可能な物。
1つならChgBG(class)、複数なら ChgBG('class','class','class') の様に必要なだけ引数として渡す。
*********************************
どちらも止めたい場合は、StopChg() を呼び出すだけ。
No.1
- 回答日時:
簡潔に述べさせてもらうと。
・ class名が同じ複数の<div>要素の場合、
var tags=document.getElementsByTagName('div');
で、tagsに配列が入るので
for(var i = 0; i < tags.length; i++) {
}
のループの中でクラス名()が一致するものの背景のみを変更する形をとると良いでしょう。
・ id名をhtmlから指定する場合は、
function ChangeBg(){
を
function ChangeBg(id){
に変更し、2箇所の
'vector'
を
id
に替えればよいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
変数名をどのようにつけるのが...
-
javascriptでオブジェクトの重...
-
読み込んだQRコードをフォーム...
-
onclickとonmouseoverを同時に...
-
ダブルクォーテーションが消え...
-
createElementで作成した要素を...
-
テキストサイズ拡大・縮小のJav...
-
removeEventListenerについて
-
document.getElementById( ).st...
-
指定したパスが現URLに含まれて...
-
Notice:Undefined index が。
-
IEの半角スペースの連続とinner...
-
jQueryのアコーディオンメニュ...
-
jQueryで同じid属性が複数あっ...
-
10秒後に1秒ごとに1行づつ表示...
-
自働生成される<div>タグに連番...
-
プルダウンメニューに画像を使...
-
タブで開いてさらにタブ内をア...
-
iframe内のリンクが飛ばないの...
マンスリーランキングこのカテゴリの人気マンスリー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を追加
おすすめ情報