移动动画的封装之三:解决越来越快的问题
2019-05-13 本文已影响0人
椋椋夜色
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> 移动动画的封装之三:解决越来越快的问题 </title>
<!-- 解决多次点击会越来越快的问题
解决办法:在开启下一个计时器之前,把上一个计时器停止 -->
<style>
.box {
width: 100px;
height: 100px;
background-color: red;
position: absolute;
margin-top: 20px;
}
#btn {
display: none;
float: left;
margin-right: 5px;
}
</style>
</head>
<body>
<input type="button" value="回到0" id="btn">
<input type="button" value="移动到400" id="btn1">
<input type="button" value="移动到800" id="btn2">
<div class="box"></div>
<script>
// 找到元素
var box = document.querySelector('.box');
var btn = document.querySelector('#btn');
//给计时器一个id
var timerID;
function ben(add) {
// 先清除上一个计时器
clearInterval(timerID);
// 保证不管点多少次,只有一个计时器
timerID = setInterval(function () {
// 获取一下当前位置
var box1 = box.offsetLeft;
// 要用距离 判断是否大于10,大于就走,不大于就直接到目的地
if (Math.abs(add - box1) > 10) {
// 当前位置往前走1步(1步为10像素)
box1 += add > box1 ? 10 : -10;
box.style.left = box1 + "px";
} else {
//距离不够走一步,就直接到目的地
box.style.left = add + "px";
}
// 如果到了目的地就停止
if (add == box1) {
clearInterval(timerID);
}
}, 20)
};
// 添加点击事件
document.getElementById('btn').onclick = function () {
btn.style.display = "none";
ben(0);
}
document.getElementById('btn1').onclick = function () {
ben(400);
btn.style.display = "block";
}
document.getElementById('btn2').onclick = function () {
ben(800);
btn.style.display = "block";
}
</script>
</body>
</html>