1. 程式人生 > >JavaScript 實現碰壁反彈

JavaScript 實現碰壁反彈

前言:碰壁反彈所要的效果就是一個小塊在一個大的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;
        }
    }

下面附上效果圖和原始碼下載地址

效果圖: