我有以下动画:
<!DOCTYPE HTML>
<html>
<head>
<style>
.example_path {
position: relative;
overflow: hidden;
width: 530px;
height: 30px;
border: 3px solid #000;
}
.example_path .example_block {
position: absolute;
background-color: blue;
width: 30px;
height: 20px;
padding-top: 10px;
text-align: center;
color: #fff;
font-size: 10px;
white-space: nowrap;
}
</style>
<script>
function move(elem) {
var left = 0
function frame() {
left+=10 // update parameters
elem.style.left = left + 'mm' // show frame
if (left == 10000) // check finish condition
clearInterval(id)
}
var id = setInterval(frame, 1) // draw every 1ms
}
</script>
</head>
<body>
<div onclick="move(this.children[0])" class="example_path">
<div class="example_block"></div>
</div>
</body>
</html>
如您所见,如果蓝色块穿过它,则会移出矩形。我怎么让蓝色块围绕矩形边框来回摆动,保持速度不变...
(在我的情况下,速度是10米/秒,又名10毫米/毫秒)
答案 0 :(得分:3)
您需要将代码更新为:Here is working JSfiddle
function move(elem) {
var left = 0
var fwdMove = true;
function frame() {
if (left < 0) {
fwdMove = true;
} else if (left > 520) {
fwdMove = false;
}
fwdMove?left += 10:left -= 10
elem.style.left = left + 'px' // show frame
}
var id = setInterval(frame, 1) // draw every 1ms
}
答案 1 :(得分:0)
我们首先添加一个变量来跟踪我们前进的方向。我们不想修改你移动的速度,所以我们使用正1或负1来影响位置。
var direction = 1; // 1=Right, -1=Left
var left = 0
function frame() {
left+=(10 * direction); // update parameters
因为mm是打印单元,我们正在浏览器中工作,所以我们将其更改为使用px。如果你真的需要使用mm,你必须找到一种在它们之间进行转换的方法,让盒子停在适当的位置。
elem.style.left = left + 'px' // show frame
最后,我们检查一下是否超过了盒子的边界,如果是这样,我们将它放回盒子中并反转方向;
if (left <= 0) {
direction = 1; // Begin moving to the left
left = 0; // Put the box back in the path
} else if (left >= (530 - 20)) {
direction = -1; // Begin moving to the right
left = (530 - 20); // Put the box back in the path
}