フェードイン/アウトはページが表示される前(フェードイン) 又は 別のページに移るとき(フェードアウト) 時に背景色を変えて同様の効果を挙げるもので、 最も一般的なテクニックの1つです。
フェードイン/アウトの実行部分は以下の通りです。
<script language="JavaScript"><!-- cvtable='0123456789ABCDEF'; // 10進数を16進数に変換する関数 function ToHexa(n){ if(n<=0) return '00'; else if(n>=255) return 'ff'; return cvtable.charAt(Math.floor(n/16))+ cvtable.charAt(n%16); } // 背景色を変更する関数 function SetBgColor(r,g,b){ document.bgColor='#'+ToHexa(r)+ToHexa(g)+ToHexa(b); } function Fade(step,sr,sg,sb,er,eg,eb){ // step: 階調, // sr,sg,sb: 最初の色(RGB値) // er,eg,eb: 最後の色(RGB値) for(var i=0;i<=step;i++){ SetBgColor( Math.floor(sr+(er-sr)*(i/step)), Math.floor(sg+(eg-sg)*(i/step)), Math.floor(sb+(eb-sb)*(i/step)) ); } } // --></script>
但し、このスクリプトは NN6 では効果がありません。
これは、NN6 の描画がブラウザに制御が渡ってから実行されるためで
( IE4 の初期のころもこのような動作でした ^^;
)、
もし、NN6 でも同様な効果を演出したい場合は、for ループせずに
setTimeout で行います。
<script language="JavaScript"><!-- cvtable='0123456789ABCDEF'; // 10進数を16進数に変換する関数 function ToHexa(n){ if(n<=0) return '00'; else if(n>=255) return 'ff'; return cvtable.charAt(Math.floor(n/16))+ cvtable.charAt(n%16); } // 背景色を変更する関数 function SetBgColor(r,g,b){ document.bgColor='#'+ToHexa(r)+ToHexa(g)+ToHexa(b); } tid =null; interval=50; cStep=0; nStep =0; sr=0; sg=0; sb=0; er=0; eg=0; eb=0; // フェード関数 function startFade(step,r0,g0,b0,r1,g1,b1){ // step: 階調, // r0,g0,b0: 最初の色(RGB値) // r1,g1,b1: 最後の色(RGB値) if(tid==null){ cStep=0; nStep=step; sr=r0; sg=g0; sb=b0; er=r1; eg=g1; eb=b1; doFade(); } } // フェード実行関数 function doFade(){ if(cStep++<nStep){ SetBgColor( Math.floor(sr+(er-sr)*(cStep/nStep)), Math.floor(sg+(eg-sg)*(cStep/nStep)), Math.floor(sb+(eb-sb)*(cStep/nStep)) ); tid=setTimeout('doFade()',interval); } else tid=null; } // --></script>
setTimeoutを使用する方法は、
当然ですが、onUnloadイベントでは使用できません。f(^^;
使用例
上記の Fade関数 を好きな場所で使用すれば、 フェードイン/アウトが実現できます。
例えば、表示時にグレイから黄色にフェードインし、 他のページに行く時は逆にフェードアウトする場合は以下のように記述します。
<body bgColor="#808080" ...
onUnload="Fade(16,0xe0,0xff,0xff,0x80,0x80,0x80);">
:
<script language="JavaScript"><!--
Fade(16,0x80,0x80,0x80,0xff,0xff,0xe0);
// または
startFade(16,0x80,0x80,0x80,0xff,0xff,0xe0);
// --></script>
注意事項