下記が、ソースです。
時間ができたら、解説とかしてみたいですけど………時間出来そうにないなぁ…(T-T)
/*-------------------------------------------------------------------
はねるはねるわ、リンクが跳ねるわ。 そして、壊れる。
*************************************************
*** リンクが跳ねてこわれるスクリプト Ver.4.50 ***
*************************************************
<address>
いろきゅう
http://ir9.jp/
</address>
** コメントはけさないでちょ! **
** ユーザー設定エリアのパラメータは、
各自で自由に変更してかまいません。 **
// ---- Ver.04.50.0002 : 2002/01/03 ----------
// * 落ちたあと、その要素を非表示にしていたつもりだったけど
// 実は、文法ミスにより表示されたままだったのを修正。
//
// ---- Ver.04.50.0001 : 2001/09/16 ----------
// * スクリプト配布用に組みなおし
// * リンクが跳ねて壊れるだけにした。
// * 64 以上イベントが起きたとしても、無視するように修正
// * メッセージを表示するかしないの選択が可能に!
---------------------------------------------------------------------*/
/* ■■■■■ ユーザー設定エリア ■■■■■ */
// リンクが落ちる確率 ( 1.00 〜 0.00 )
var Kakuritu = 0.04;
// 落ちたときにメッセージを表示するか? (true or false)
var MsgFlg = true;
// おちたときの表示するメッセージ (ダブルコーテーションで囲うのを忘れずに。)
var Message = "■ 警告 ■\n\nシーラ家が、壊れやすいからって、がんばって壊さないでください!\n(マウスでがんばってる姿が、目に見えるよぅ〜:笑)";
/* ■■■■■ ユーザー設定エリア 終わり ■■■■■ */
//// ブラウザ判定
var bl_user = navigator.userAgent;
var bl_ver = navigator.appVersion;
var bl_name = navigator.appName;
var bl_id = 0;
if(bl_name.indexOf('Internet Explorer') >= 0)
{
if(bl_ver.charAt(0) >= 4)
{
bl_id = 1;
}
}
//////////////////////////
//////////////////////////
var hairetu = 65;
var mhairetu = hairetu - 1;
var wariai = 5;
var wariaiTmp = 0;
var wariaiNow = 0;
var i; // 落ちるのと共有してます。
var g_nLinkCount;
var g_NowID = 0; // 今のID格納
var g_aThis = Array(hairetu); // this ポインタ格納
var g_ahStop = Array(hairetu); // setInterval()
var g_aPhase = Array(hairetu); // フェーズ格納
var g_bFlg = true; // 落ち処理に入ったリンクがあるかい?
var g_Count = 0; // イベントの数
/////////////////////////// はじめに、この関数を呼び出そう♪
function jmpbreak()
{
if(bl_id != 1) return 1; // IE 以外はさようなら〜 (T^T)/~
g_nLinkCount = document.links.length;
for(i = 0; i < hairetu; i++)
{
g_aPhase[i] = 0;
}
for(i = 0; i < g_nLinkCount; i++)
{
document.links[i].style.position = "relative";
document.links[i].onmouseover = jump; // Link に onMouseOver の機能を追加するにゅ。
document.links[i].Flg = false;
}
}
function jump()
{
if(g_Count > 64 && this.Flg) return 0;
if(g_bFlg && Math.random() < Kakuritu)
{
this.Flg = true; // フラグを立てて、これ以上はねないようにしましょう。
g_bFlg = false;
g_aThis[mhairetu] = this.style;
g_ahStop[mhairetu] = setInterval("jumpFall()",50);
}
else
{
g_aThis[g_NowID] = this.style;
g_ahStop[g_NowID] = setInterval("jumpProc(" + g_NowID + ")",50);
g_NowID = ++g_NowID % mhairetu;
g_Count++;
}
}
function jumpFall()
{
if(g_aPhase[mhairetu] < 10)
{
jumpProc(mhairetu);
g_aPhase[mhairetu]--; // jumpProc の中ですでにインクリメントされちゃってるから、デクリメントしちゃいましょう。 // 無駄な処理やなぁ…(^^ ;;
}
else if(g_aPhase[mhairetu] > 15)
{
jumpDown();
if(g_aPhase[mhairetu] > 38)
{
clearInterval(g_ahStop[mhairetu]);
g_aThis[mhairetu].visibility = "hidden"; // 4.50.0002 Fix! : g_aThis.visibility = "hidden";
g_bFlg = true;
g_aPhase[mhairetu] = 0;
wariaiTmp = 0;
wariaiNow = 0;
if(MsgFlg) alert(Message);
}
}
g_aPhase[mhairetu]++;
// 11〜15までの間は、何も処理しないにょ(ちょっと止まってるにゅ)。
}
function jumpDown()
{
wariaiTmp += wariai;
wariaiNow += wariaiTmp;
g_aThis[mhairetu].top = wariaiNow + "px";
}
function jumpProc(id)
{
switch(g_aPhase[id])
{
case 0:
case 4:
case 7:
{
g_aThis[id].top = "-2px";
}
break;
case 1:
case 3:
{
g_aThis[id].top = "-3px";
}
break;
case 2:
{
g_aThis[id].top = "-4px";
}
break;
case 5:
case 9:
case 11:
{
g_aThis[id].top = "0px";
}
break;
case 6:
case 8:
case 10:
{
g_aThis[id].top = "-1px";
}
break;
default:
{
alert(g_aPhase[id]);
}
}
if(g_aPhase[id] == 11)
{
clearInterval(g_ahStop[id]);
g_aPhase[id] = 0;
g_Count--;
}
else
{
g_aPhase[id]++;
}
}