ページの装飾に関するTips


・スクロールメッセージ

NN2Unknown NN3Bug NN4OK MozillaOK IE3Bug IE4OK

JavaScript によるスクロールメッセージは結構古いテクニックで、 色々な手法がありますが、 現在ではこの手法を使用したページは少なくなっているようです。

この手法はウィンドウステータス領域に表示させるのが一般的ですが、 この他にも FORM のテキスト入力域に表示する方法があります。

スクロールメッセージの最も効果的な用途は次の項目ではないでしょうか。

スクロールメッセージの実行部分は以下の通りです。

<script language="JavaScript"><!--
stwidth  = 80;   // 表示領域の幅(文字数)
interval = 150;  // インターバル時間(msec)
tid      = null; // タイマ識別子

stblank  = ''; for(var i=0;i<stwidth;i++) stblank+=' ';
curScr   = new scrObj('',interval,window);
oldScr   = '';

// スクロールオブジェクト
function scrObj(msg,ival,target){
  this.ststrip= stblank+msg+stblank;
  this.msgstr = msg;
  this.msglen = msg.length;
  this.stpos  = 0;
  this.interval = ival;
  this.target = target;
  return this;
}
// スクロール関数
function scrollMsg(){
  curScr.stpos++;
  if(curScr.stpos==stwidth+curScr.msglen) curScr.stpos=0;
  var msg = curScr.ststrip.substring(
              curScr.stpos,curScr.stpos+stwidth);
  if(curScr.target==window) window.status=msg;
  else                      curScr.target.value=msg;
  tid=setTimeout('scrollMsg()',curScr.interval);
}
// スクロール処理取消関数
function cancelMsgTime(){
  if(tid){ clearTimeout(tid); tid=null; }
}
// スクロール処理の初期化関数
function setScrollMsg(msg,save,target){
  if(save) oldScr=curScr;
  curScr=new scrObj(msg,interval,target);
  cancelMsgTime();
  scrollMsg();
}
}
// スクロール文字の復元関数
function recoverMsg(){ curScr=oldScr; }
// --></script>

この文字の部分は必要に応じて修正します。

stwidthは表示領域の幅(文字幅)で、 intervalは更新周期の時間です。

stwidthの値は小さいと領域の途中から現れ、 大きいとなかなか表示されません。適切な長さに調節してください。

intervalは更新周期なので、 小さくすると早く動作しますが、CPUの負担になる場合があります。

使用方法は onLoad や onMouseOver など、 メッセージ表示を開始したいイベント発生時に setScrollMsg 関数を呼出し、 表示を停止したい場合は同様に cancelMsgTime 関数を呼び出します。 また、onLoad, onMouseOver 両者を共存させるなら onMouseOut時には cancelMsgTime の代わりに recoverMsg 関数を呼び出します。

各関数の呼出形式は以下の通りです。

setScrollMsg(msg,save,target);
msg    : 表示したいメッセージ
save   : 現在状態を退避する(true)かしない(false)か。
target : 表示先( window または FORM のテキストオブジェクト )

cancelMsgTime();
引数なし

recoverMsg();
引数なし

使用例

使い方はページが表示されたと同時に「Welcome!」のメッセージを表示するなら BODYタグの onLoad, onUnload イベントを使用します。

<body ... onLoad="setScrollMsg('Welcome!',false,window);"
          onUnload="cancelMsgTime();">

リンク上にマウスが来ている間「ちはっ」と 表示するなら以下のようにします。

<a href="hogehoge.htm"
   onMouseOver="setScrollMsg('ちはっ',true,window);"
   onMouseOut ="cancelMsgTime();window.status=''">リンク</a>

上記の2つを併用するなら次のようにします

<body ... onLoad="setScrollMsg('Welcome!',false,window);"
          onUnload="cancelMsgTime();">
    :
<a href="hogehoge.htm"
   onMouseOver="setScrollMsg('ちはっ',true,window);"
   onMouseOut ="recoverMsg();">リンク</a>

こちらに使用例を用意してみました。 f(^^;


注意事項

caution
コード中のstwidth変数はスクロール表示領域の幅(カラム数)ですが、 半角スペースで文字位置をコントロールしているので、 この値は十分にないと領域の途中から文字が現れます。 特に、表示領域の文字列がプロポーショナルフォントの場合は注意が必要です。
caution
コード中でsubstring関数を使用していますが、 仕様では引数のindexは charachter といっていますが、 古いバージョンのブラウザではバイト位置を返します。 このため、スクロールメッセージに日本語が指定されると一部文字化けする場合があります。 日本語を指定する場合はもう少し改造が必要です。
caution
また、このスクリプトは NN4.06〜NN4.5 で発生するステータス領域の文字化け問題の 対策を施していません。 もし、これらのバージョンも対象とするならこの色の部分を 以下のように修正します。

  if(curScr.target==window) setWindowStatus(msg);
  else                      curScr.target.value=msg;

setWindowStatus関数に関しては「ステータス領域文字化け対策」の項を参照してください。

注意事項

NN2 IE3
onMouseOutイベントは JavaScript1.1 で追加されたイベントで、 Netscape Navigator 2.x、MS Internet Explorer 3.x で使用する場合は無視され、 マウスがリンク上になくなってもメッセージ表示はなくなりません。

Copyright(c) 1998 - 2001 ShinSoft. All rights reserved.