移動量を変化させながらバウンドする画像
四辺に突き当たると、横方向/縦方向の移動量を再計算し、ランダムな量に変化させる。
四辺に突き当たると、横方向/縦方向の移動量を再計算し、ランダムな量に変化させる。
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)