HOME  >>>  HTML整理ノート  >>> DHTML --  基本編  応用編

移動量を変化させながらバウンドする画像

四辺に突き当たると、横方向/縦方向の移動量を再計算し、ランダムな量に変化させる。 

 

 

Sample Source......................................................................>>>

<script language="JavaScript"><!--
var x = 100;    //ボールの現在X座標
var y = 100;    //ボールの現在Y座標
var dx = 6;        //ボールの横方向の増分(減分)
var dy = 8;        //ボールの縦方向の増分(減分)
var timerID;

function Move(){
var obj = document.all.pic;    //動かす対象オブジェクト
var bodyCW = document.body.clientWidth; //WWWプラウザの横幅
var bodyCH = document.body.clientHeight; //WWWプラウザの縦幅
var bodySCL = document.body.scrollLeft; //WWWプラウザの左端X座標
var bodySCT = document.body.scrollTop; //WWWプラウザの上端Y座標
//bodySCLとbodySCTは、WWWプラウザの上下左右スクロールで変化する

x += dx;    //X座標方向を増やす(減らす)
y += dy;    //Y座標方向を増やす(減らす)
if((x+obj.offsetWidth >= bodyCW+bodySCL)||(x <= bodySCL)){
//ボールがWWWプラウザウィンドウの右端||左端に達したとき
    ChangeDelay(1);    //dx/dyの値を再計算し変化させる。
    if(x <= bodySCL){
        x = bodySCL; //ボールの位置をWWWプラウザの左端に合わす
    }else{
        x = bodyCW - obj.offsetWidth + bodySCL;
            //ボールの位置をWWWプラウザの右端に合わす
    }
}
if((y+obj.offsetHeight >= bodyCH+bodySCT)||(y <= bodySCT)){
        //ボールがWWWプラウザウィンドウの下端||上端に達したとき
    ChangeDelay(2);         //dx/dyの値を再計算し変化させる。
    if(y <= bodySCT)y = bodySCT;
    else y = bodyCH - obj.offsetHeight + bodySCT;
}
obj.style.posLeft = x; //ボールのleft位置を設定
obj.style.posTop = y;    //ボールのtop位置を設定
}

function ChangeDelay(n){
    delayX = Math.round(Math.random()*12);//0〜12のランダム整数値を返す。
    delayY = Math.round(Math.random()*16);//0〜16のランダム整数値を返す。
   
    if(n == 1){   
        //dxの符号反転(増分と減分を切り替える)
        //dyの符号はそのまま
        if(dx < 0)dx = delayX;
        else dx = -delayX;

        if(dy < 0)dy = -delayY;
        else dy = delayY;
    }
    if(n == 2){   
        //dyの符号反転(増分と減分を切り替える)
        //dxの符号はそのまま
        if(dx < 0)dx = -delayX;
        else dx = delayX;

        if(dy < 0)dy = delayY;
        else dy = -delayY;
    }
}

function OnOff(){
    if(bt.innerText == "Move"){
        bt.innerText = "Stop";
        bt.style.backgroundColor = "lime";
        timerID=setInterval('Move()',40);
    }else{
        bt.innerText = "Move";
        bt.style.backgroundColor = "";
        clearInterval(timerID);
    }
}
//--></script>
</head>

<body>
<button id="bt" onclick="OnOff()">Move</button>


end(最終更新:12/11/12)