リンクが跳ねて壊れるスクリプト Ver.4.50 ソース

下記が、ソースです。
時間ができたら、解説とかしてみたいですけど………時間出来そうにないなぁ…(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]++;
    }
}

▲このページのTOP▲