JavaScript 實現碰壁反彈
阿新 • • 發佈:2019-02-01
前言:碰壁反彈所要的效果就是一個小塊在一個大的DIV裡做X軸和Y軸的勻速運動,當碰到大DIV的邊框時,反方向移動。
正文:
步驟1:首先來分析,怎麼樣才能使得小球動起來。
a、給小球一個絕對定位absolute,通過每秒改變它的left和top的值來使它移動。在這兒,我們設定兩個速度變數speedX=2和speedY=2.以及偏移量x,y.通過定時器,來使x+=speedX,y+=speedY,使得小球移動。同時加入判斷,防止小球出邊界。
x += speedX;
y += speedY;
//判斷小球是否碰到邊界
if(x <= 0 || x > mainBox.offsetWidth - ball_.offsetWidth) {
speedX = -speedX
}
if(y <= 0 || mainBox.offsetHeight - ball_.offsetHeight <= y) {
speedY = -speedY
}
//改變小球的left和top值
ball_.style. left = x + 'px';
ball_.style.top = y + 'px';
步驟2:判斷小球是否落到擋板上
//小球的偏移量
var l1 = ball_.offsetLeft;
var r1 = l1 + ball_.offsetWidth;
var t1 = ball_.offsetTop;
var b1 = t1 + ball_.offsetHeight;
//擋板的偏移量
var l2 = pai.offsetLeft;
var r2 = l2 + pai.offsetWidth;
var t2 = pai.offsetTop;
var b2 = t2 + pai.offsetHeight;
//判斷小球是否落到擋板上
if(b1 >= t2 && r1 > l2 && r2 > l1) {
speedY = -speedY;
score++;
score_.innerHTML='分數:'+score+'分'
}
//小球未落到擋板上,遊戲結束
if(b1-1> t2) {
clearInterval(timer);
zz.style.display = 'inline-block'
return;
}
步驟3:加入鍵盤事件,來控制擋板的移動
document.onkeydown = function() {
var event = window.event || event;
switch(event.keyCode) {
case 37:
//擋板不能超出左邊界
if(pai.offsetLeft > 0) {
pai.style.left = pai.offsetLeft - aa + 'px'
}
break;
case 39:
//擋板不能超出右邊界
if(pai.offsetLeft <= mainBox.offsetWidth - pai.offsetWidth - aa) {
pai.style.left = pai.offsetLeft + aa + 'px'
}
break;
default:
break;
}
}