<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>碰壁反弹</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.wp {
width: 1000px;
height: 600px;
position: relative;
margin: 10px auto 0;
border: 1px #f00 solid;
}
#ball {
width: 40px;
height: 40px;
border-radius: 50%;
background: #04BE02;
position: absolute;
}
</style>
</head>
<body>
<div class="wp">
<div id="ball"></div>
</div>
</body>
</html>
<script type="text/javascript">
function rand(m, n) {
return Math.floor(Math.random() * (n - m + 1) + m);
}
var ball = document.getElementById("ball");
//设置小球的出现位置,水平方向最大960,垂直方向最大560
var l = rand(0, 960);
var t = rand(0, 560);
ball.style.left = l + 'px';
ball.style.top = t + 'px';
/*
碰壁反弹,实质上就是根据left和top临界值,设置改变方向,再结合计时器进行操作
*/
var timmer;
var xDur = true; //球向右移动
var yDur = true; //球向下移动
/*
思路: 使用 xDur 和 yDur 来确定小球在x轴和y轴移动的方向,使用l和t来设置小球的left和top值,只有小球到达临界值的时候, 才会改变方向,改变方向就是改变 xDur 和 yDur的布尔值
*/
timmer = setInterval(function () {
// 判断x轴方向
if (l >= 960) {
xDur = false;
}
if (l <= 0) {
xDur = true;
}
// 判断y轴方向
if (t >= 560) {
yDur = false;
}
if (t <= 0) {
yDur = true;
}
xDur ? l++ : l--;
yDur ? t++ : t--;
/*
// 向右运动
if(xDur){
l++;
}
// 向左运动
if(!xDur){
l--;
}
// 向下运动
if(yDur){
t++;
}
// 向上运动
if(!yDur){
t--;
} */
ball.style.left = l + 'px';
ball.style.top = t + 'px';
}, 10);
</script>
11-10
2152