JavaScript語法 --> 碰壁反彈
阿新 • • 發佈:2019-02-14
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>
程式碼解釋:
- Css部分:先要設定跳動的元素CSS屬性,position:absolute;絕對定位,但不設定left、top屬性值,待使用js程式碼得出。
- 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程式碼達到碰壁反彈效果,希望對大家有所幫助。