| BACK |
JavaScript

画像流之助

上下左右の好きな方向に、複数の画像を流せるJavascriptです。
雪を降らせる、風船を飛ばす、魚を泳がす、などが可能。
移動方向は画像毎に設定できます。(Ver.0.02 より)

ご利用の前に「利用規定」を必ず読んでおいてください。
スクリプトを利用した場合、無条件に同意したものとみなします。


更新履歴
2001.09.09
Ver.0.01 -> Ver.0.02
画像別に移動方向を設定できるようになりました。
動作パラメタも移動方向別に設定ができます。
スクロール追随もできるようになりました。
2001.08.22
Ver.0.01公開

動作確認済ブラウザ

Internet Explorer 5.01 (Windows)
Netscape Communicator 4.7 (Windows)
Netscape 6.01 (Windows)


設置方法
  1. Moving Object Libraly」を</HEAD>の直前にコピーします。
  2. </BODY>の(なるべく)直前に以下のソースをコピーします。
  3. ソース内の赤字部分を好みで設定してください。
    また、 画像ファイルは別途ご用意ください。

<!-- ======================================================================
                         画像流之助 Ver.0.02
                http://homepage3.nifty.com/masas/sdir/
              Copyright(c)2001 Masa, All Rights Reserved.
======================================================================= -->
<script type="text/javascript" language="JavaScript">
<!--
IMGTBL = new Array();
//---------------------------------------------------
//     設定可能なパラメタ(ここから)
//---------------------------------------------------.
IMGTBL[0] = new Array("sakana.gif", 38, 14, 2); // 画像の名前、幅、高さ,移動方向
IMGTBL[1] = new Array("sakana.gif", 38, 14, 2);
IMGTBL[2] = new Array("sakana.gif", 38, 14, 2);
IMGTBL[3] = new Array("sakana.gif", 38, 14, 2);
IMGTBL[4] = new Array("sakana.gif", 38, 14, 2);
IMGTBL[5] = new Array("sakana.gif", 38, 14, 2);
IMGTBL[6] = new Array("sakana.gif", 38, 14, 2);
IMGTBL[7] = new Array("awa.gif", 10, 10, 3);
IMGTBL[8] = new Array("awa.gif", 10, 10, 3);
IMGTBL[9] = new Array("awa.gif", 10, 10, 3);
  //////////////////////////////////////////////////////////////////
  // ■ IMGTBL[0]〜IMGTBL[n]について補足                          //
  // IMGTBL[0]は必須です。                                        //
  // [ ]内を連番にし、必要なだけ行を追加または削除してください。  //
  // 移動方向は (0:左,2:右,3:上,5:下) 。番号が飛んでるので要注意! //
  //////////////////////////////////////////////////////////////////
var TOPMARGIN   = 50;  // 上端からの無効領域(ピクセル)
var BOTMARGIN   = 100; // 下端からの無効領域(ピクセル)
var LEFTMARGIN  = -50; // 左端からの無効領域(ピクセル)
var RIGHTMARGIN = 40;  // 右端からの無効領域(ピクセル)
  ////////////////////////////////////////////////////////////////////////////////////
  // ■ 無効領域について補足                                                        //
  // それぞれ大きい数値にするほど、ブラウザの中心部で動き、枠まで行かなくなります。 //
  // マイナスの値を指定すると、ブラウザの枠外まで有効になります。                   //
  // ブラウザのスクロールバーを嫌う場合は、BOTMARGIN と RIGHTMARGIN を大きめに。    //
  ////////////////////////////////////////////////////////////////////////////////////
MINSTEP = new Array(  5, "←左用/右用→",  5,   5, "←上用/下用→",   5);  // 最小移動量(1回に進む最低ピクセル数)
MAXSTEP = new Array( 15, "←左用/右用→", 15,  15, "←上用/下用→",  15);  // 最大移動量(1回に進む最大ピクセル数)
MINFREQ = new Array(200, "←左用/右用→",200, 200, "←上用/下用→", 200);  // 1周期を最低何ピクセルにするか
MAXFREQ = new Array(300, "←左用/右用→",300, 300, "←上用/下用→", 300);  // 1周期を最大何ピクセルにするか
MINAMP  = new Array(  5, "←左用/右用→",  5,   5, "←上用/下用→",   5);  // 振幅を最低何ピクセルにするか
MAXAMP  = new Array( 20, "←左用/右用→", 20,  20, "←上用/下用→",  20);  // 振幅を最大何ピクセルにするか
  ///////////////////////////////////////////////////////////////////////////////////
  // ■ 動作設定について補足                                                       //
  // 各値を移動方向別に設定できます。                                              //
  // 例えば、右方向に動く画像はゆっくり、上方向に動く画像は速く、という設定とか。  //
  ///////////////////////////////////////////////////////////////////////////////////
  // ■ 周期と振幅について補足                                                     //
  // +y      *                    左図は SINカーブです。(画像を右へ進める場合)     //
  //      *     *                 0からスタートし、+yまで行き、今度は -yまで戻り、 //
  //  0 *         *         *     再び 0に戻ります。これで1周期。                  //
  //                *     *                                                        //
  // -y                *          振幅は +y から -y までの幅です。                 //
  ///////////////////////////////////////////////////////////////////////////////////
var SCRL = 0;       // スクロールに追随させる場合 1、させない場合 0
var TLATE = 100;    // 移動処理間隔(msec) 1000にすると1秒間隔で移動の処理
//---------------------------------------------------
//     設定可能なパラメタ(ここまで)
//---------------------------------------------------
var MAXOBJ = IMGTBL.length;
function letFlow() {
  for (i = 0; i < MAXOBJ; i++) {
    if (IMGTBL[i][3] < 3) {
      nXpos[i] += step[i] * (IMGTBL[i][3]-1);
      nYpos[i] = zeroYpos[i] + Math.round(amp[i]/2 * Math.sin(Math.PI*2/freq[i] * nXpos[i]));
      if (IMGTBL[i][3] == 0) {
        if (nXpos[i] < XMIN || nYpos[i] > yMax[i] || nYpos[i] < YMIN) {
          nXpos[i] = xMax[i]; nYpos[i] = Math.floor(Math.random() * yMax[i]); zeroYpos[i] = nYpos[i];
          setRandVal(i);
        }
      }
      if (IMGTBL[i][3] == 2) {
        if (nXpos[i] > xMax[i] || nYpos[i] > yMax[i] || nYpos[i] < YMIN) {
          nXpos[i] = XMIN; nYpos[i] = Math.floor(Math.random() * yMax[i]); zeroYpos[i] = nYpos[i];
          setRandVal(i);
        }
      }
    } else {
      nYpos[i] += step[i] * (IMGTBL[i][3]-4);
      nXpos[i] = zeroXpos[i] + Math.round(amp[i]/2 * Math.sin(Math.PI*2/freq[i] * nYpos[i]));
      if (IMGTBL[i][3] == 3) {
        if (nYpos[i] < YMIN || nXpos[i] > xMax[i] || nXpos[i] < XMIN) {
          nYpos[i] = yMax[i]; nXpos[i] = Math.floor(Math.random()*xMax[i]); zeroXpos[i] = nXpos[i];
          setRandVal(i);
        }
      }
      if (IMGTBL[i][3] == 5) {
        if (nYpos[i] > yMax[i] || nXpos[i] > xMax[i] || nXpos[i] < XMIN) {
          nYpos[i] = YMIN; nXpos[i] = Math.floor(Math.random()*xMax[i]); zeroXpos[i] = nXpos[i];
          setRandVal(i);
        }
      }
    }
    if (SCRL) {
      movObj[i].moveScrl(nXpos[i], nYpos[i]);
    } else {
      movObj[i].move(nXpos[i], nYpos[i]);
    }
  }
}
function setRandVal(num) {
  var objdir = IMGTBL[num][3];
  step[num] = Math.floor(Math.random() * (MAXSTEP[objdir]-MINSTEP[objdir])) + MINSTEP[objdir];
  freq[num] = Math.floor(Math.random() * (MAXFREQ[objdir]-MINFREQ[objdir])) + MINFREQ[objdir]; 
  amp[num]  = Math.floor(Math.random() * (MAXAMP[objdir]-MINAMP[objdir])) + MINAMP[objdir];
}
function mainLoop()
{
  if (movingOn) {
    letFlow();
    timerID = setTimeout("mainLoop()", TLATE);
  }
}
var movingOn = 1;
function stopMove()
{
  if (movingOn) {
    for (objnum = 0; objnum < MAXOBJ; objnum++) {
      movObj[objnum].show(0);
    }
    movingOn = 0;
  }
}
function startMove()
{
  if (!movingOn) {
    movingOn = 1;
    mainLoop();
    for (objnum = 0; objnum < MAXOBJ; objnum++) {
      movObj[objnum].show(1);
    }
  }
}
var timerID = 0;
var XMIN = LEFTMARGIN;
var YMIN = TOPMARGIN;
nXpos = new Array();
nYpos = new Array();
zeroXpos = new Array();
zeroYpos = new Array();
movObj = new Array();
amp = new Array();
freq = new Array();
step = new Array();
getDocSize();
xMax = new Array();
yMax = new Array();
if (readyDhtml) {
  for (objNo = 0; objNo < MAXOBJ; objNo++) {
    xMax[objNo] = docWidth - RIGHTMARGIN - IMGTBL[objNo][1];
    yMax[objNo] = docHeight - BOTMARGIN - IMGTBL[objNo][2];
    ix = Math.floor(Math.random() * xMax[objNo]);
    iy = Math.floor(Math.random() * yMax[objNo]);
    movObj[objNo] = new MovingObject(objNo,IMGTBL[objNo][0],IMGTBL[objNo][1],IMGTBL[objNo][2]);
    nXpos[objNo] = ix;  zeroXpos[objNo] = ix;
    nYpos[objNo] = iy;  zeroYpos[objNo] = iy;
    setRandVal(objNo);
  }
  mainLoop();
}
// -->
</script>
<!-- ============================= End of 画像流之助 ============================ -->


下のはおまけで、画像をストップさせるボタンです。
必要ならどうぞ。


<form name="formmvoff">
  <input type="button" value="止める" onClick="stopMove()">
</form>


こちらは、画像を再スタートさせるボタンです。
必要ならどうぞ。


<form name="formmvon">
  <input type="button" value="再  開" onClick="startMove()">
</form>



Copyright © 2001-2002 Masa, All Rights Reserved.