|
訪問者数![]() ![]() ![]() ![]()
|
ご意見・ご感想は メール または myroom の BBS までお願いします。 |
D's Cafe: Kitchen - JavaScriptこのサイトではページ全体の配色の変更やメニュー部分にJavaScriptを使っています。参考までにこれを公開します。 これを応用したい方はご自由にどうぞ。 カラーチェンジ左のメニューのカラーのところをクリックすると、次のskinChange(n)が実行されます。nには1〜8が入ります。
function skinChange(n){
skin_num = n;
styleChange(n);
imageChange(n);
tmp = "Number=" + n + "; ";
document.cookie = tmp;
}
skin_numという変数にnの値を入れておき、styleChange(n)、imageChange(n)を実行します。styleChange(n)はcssファイルの切り替えを行い、imageChange(n)は画像の入れ替えを行います。 その後nをCookieに書き込んでおきます。 これはページ移動やリロード時にそのカラーセットを継承させるためです。 nにはどうせ1〜8しか入らない、ということでescapeかけてません。 いい加減ですね。 styleChange(n)は以下の通りです。
function styleChange(n){
n_css = "sff" + n + ".css";
document.getElementById("link_id").href = n_css;
}
CSSファイルを読み込むためのLinkタグにlink_idというIDを付けておき、そのhrefをsffn.cssにしています。imageChange(n)は以下の通りです。
function imageChange(n){
m = Math.ceil(n/4);
l = n % 4;
title_img = "img/title" + m + ".png";
menu_img = "img/menu" + m + ".png";
color_img = "img/color" + m + ".png";
btn_img = "img/btn" + l + "/" + btn_name[page_id] + ".png";
btn_id = "btn" + page_id;
document.titleimage.src = title_img;
document.menuimage.src = menu_img;
document.colorimage.src = color_img;
document.images[btn_id].src = btn_img;
}
mにはn=1〜4(背景: 黒)の時に1が、n=5〜8(背景: 白)の時に2が入ります。lにはnを4で割った余りが入ります。 タイトル画像などは背景の色に合わせ画像を切り替えます。 lはメニューボタン(のうちの1個)の色を決めるために使っています。 ここでは遊び用にやってみただけなのですが、実際に色のついた(特に背景に濃い色を使ったページ)では、印刷する時などに面倒なことになることがよくあります。 そういう時にCSSの切り替えで一つのhtmlファイルで表示用と印刷用ページが出来ると何かと便利かもしれません。 メニューボタンまずはお手軽な画像のロールオーバー。いろいろなサイトで見られるやつで、ここで解説するものでもないのですが。
var btn_name = new Array(8);
btn_name[0] = "home";
...中略...
btn_name[7] = "myroom";
function btnWhite(n){
btn_id = "btn" + n;
btn_img = "img/btn5/" + btn_name[n] + ".png";
document.images[btn_id].src = btn_img;
}
function btnBlack(n){
btn_id = "btn" + n;
btn_img = "img/btn4/" + btn_name[n] + ".png";
document.images[btn_id].src = btn_img;
}
function btnColor(n){
l = skin_num % 4;
btn_id = "btn" + n;
btn_img = "img/btn" + l + "/" + btn_name[n] + ".png";
document.images[btn_id].src = btn_img;
}
最初にbtn_nameという配列を作って、中身を書き込んでおきます。btn_idにボタン画像に付けられたIDを、btn_imgに画像ファイルを指定し、画像を変更しています。 HTML中で
img src="img/btn4/home.png" id="btn0"
onclick="btnColor(0)"
onmouseout="btnBlack(0)"
onmouseover="btnWhite(0)"
のようにして実装します。ただロールオーバーするだけであれば
onmouseove="btn0.src='画像ファイル'"
などとしてもよいのですが、今回はカラーセットが変わるとonclick時のファイルも変わってしまうので、
JavaScriptの関数にしておきました。次にメニューボタンの移動について。 うっとうしいだけかもしれませんが、この程度のことならJavaScriptで充分できますよ、ということで。 この関数は左上の"〜Menu〜"という画像にも組み込んでいて、そこをクリックしてもボタンが動きます。
var n_btn, x, init_x, dest_x, step, y, timerID;
function menuAction(){
clearTimeout(timerID);
init_x = new Array(-80, 144);
dest_x = new Array(0, 64);
step = new Array(4, -4);
y = new Array(0, -112);
for (i = 0; i <4; i++){
btn_id = "btn" + i * 2;
document.getElementById(btn_id).style.left = init_x[0];
document.getElementById(btn_id).style.top = y[0];
btn_id = "btn" + (i * 2 + 1);
document.getElementById(btn_id).style.left = init_x[1];
document.getElementById(btn_id).style.top = y[1];
}
n_btn = 0;
x = init_x[0];
moveButton();
}
まず、移動するボタンのx座標の始点と終点、移動幅、y座標(固定)を指定します。ボタンは左右2列で配置しているので、配列を使っています。 すべてのボタンを初期の位置に移動させ、初期設定終了後にmoveButton関数を実行します。
function moveButton(){
m = n_btn % 2;
if(x == dest_x[m]){
n_btn += 1;
x = init_x[1-m];
}
if (n_btn > 7){
clearTimeout(timerID);
}
else{
x += step[m];
btn_id = "btn" + n_btn;
document.getElementById(btn_id).style.left = x;
timerID = setTimeout("moveButton()", 10);
}
}
moveButton関数では、まず今動かしているボタンが終了位置にいるかを判定し、それが真であれば次のボタンの移動に移ります。終了位置に到達していなければxを変化させ、画像の位置を移動させます。 setTimeoutによって、指定時間後に再度moveButton関数を実行し、移動を繰り返しています。 ページ起動時そしてページを起動した時にbodyタグのonloadハンドラで以下のpageOpen関数を実行しています。
function pageOpen(n){
page_id = n;
tmp = document.cookie;
if (tmp == ""){
skin_num = 1;
tmp = "Number=" + 1 + "; ";
document.cookie = tmp;
}
else{
skin_num = tmp.substr(7);
skinChange(skin_num);
}
}
ただ単にCookieを読み込んでskinChange関数を実行し、ボタンの画像をプリロードしているだけです。しかもCookieには"Number=n"としか書かれていないので、読み方も相当いい加減です。 とりあえず動けばいいんです(笑) |