訪問者数
47164
Since 2002.11.11
Last Update: 2002.10.26






ご意見・ご感想は メール または myroomBBS までお願いします。

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"としか書かれていないので、読み方も相当いい加減です。
とりあえず動けばいいんです(笑)
Home / D's Cafe / CD List / Release / Event / Diary / Link / myroom

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル