1. 程式人生 > >JavaScript語法 --> 碰壁反彈

JavaScript語法 --> 碰壁反彈

JavaScript語法 –> 碰壁反彈

    在js語法中,正確使用clientWidth、offsetWidth等屬性,並結合定時器,可以形成如下所示碰壁反彈效果。
這裡寫圖片描述

    程式碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>碰壁反彈</title>
    <style type="text/css">  
        #mod {
            position:relative
; width: 500px; height: 300px; margin: 0px auto; border:5px #000 solid; }
#box { position:absolute; width: 50px; height: 50px; line-height:50px; text-align:center; color
:#fff
; background: #00f; border-radius:50%; }
</style> </head> <body> <div id="mod"> <div id="box">1</div> </div> <script type="text/javascript"> function rebound() { var mod = document.getElementById("mod"
); var box = document.getElementById("box"); var maxWidth = mod.clientWidth - box.offsetWidth; var maxHeight = mod.clientHeight - box.offsetHeight; var top = box.offsetTop, left = box.offsetLeft; var speedY = 5, speedX = 2; function move() { top += speedY; left += speedX; if (top >= maxHeight) { speedY *= -1; }else if (top <= 0) { speedY *= -1; } if (left >= maxWidth) { speedX *= -1; }else if (left <= 0) { speedX *= -1; } box.style.left = left +"px"; box.style.top = top +"px"; } function autoPlay(){ setInterval(move,10); } autoPlay(); } rebound();
</script> </body> </html>

    程式碼解釋:

  1. Css部分:先要設定跳動的元素CSS屬性,position:absolute;絕對定位,但不設定left、top屬性值,待使用js程式碼得出。
  2. js部分:
    1>.clientWidth不包括邊框的可視寬(width+padding),clientHeight不包括邊框的可視高(height+padding)。
    2>.offsetWidth包括邊框的寬(width+padding+border)、offsetHeight包括邊框的高(height+padding+border)。
    3>.最大運動寬、高 = 容器不包括邊框的可視寬、高 - 跳動元素包括邊框的寬、高。
    4>.speedX水平方向的速度、speedY垂直方向的速度。
    5>. speedY = -1; speedX = -1;當元素超出設定範圍的一瞬間,速度變為負值,元素反向移動。
    6>.box.style.left = left +”px”;box.style.top = top +”px”;使用js得到Css屬性中絕對定位的left、top屬性值。
    7>.定時器不變,當速度值變大,元素移動速度變快。
var speedY = 10,
    speedX = 5;

    效果如圖:
這裡寫圖片描述
8>.速度不變,當定時器定時值變大,元素移動速度變慢。

function autoPlay(){
    setInterval(move,30);
}
autoPlay();

    效果如圖:
這裡寫圖片描述

以上就是使用js程式碼達到碰壁反彈效果,希望對大家有所幫助。