1.缓冲动画
1.平滑运动
- 需求:点击起飞 盒子开始移动 移动到1000px 盒子停止
<body>
<button>起飞</button>
<div></div>
<script>
var btn = document.getElementsByTagName("button")[0];
var oDiv = document.getElementsByTagName("div")[0]
btn.onclick = function () {
var timer = setInterval(function () {
var current = parseInt(getStyle(oDiv, "left")) + 10;
if(current==1000){
clearInterval(timer)
}
oDiv.style.left = current + "px";
}, 50)
}
</script>
2.缓冲动画基础功能
- 需求:目标值是500和目标值是1000 所花费的时间是一样的
<body>
<button>起飞</button>
<div></div>
<script>
var btn = document.getElementsByTagName("button")[0];
var oDiv = document.getElementsByTagName("div")[0]
btn.onclick = function () {
var timer = setInterval(function () {
var current = parseInt(getStyle(oDiv, "left"));
var speed = (500 - current) / 10;
console.log(current);
if (current == 500) {
clearInterval(timer)
}
oDiv.style.left = current + speed + "px";
}, 50)
}
</script>
- 问题1:永远到不了目标值
- 原因:当current是491的时候 speed=0.9 left值=parseInt(491.9px) =491 所以current的值始终在491
- 解决方法:让speed向上取整 Math.ceil
<body>
<button>起飞</button>
<div></div>
<p></p>
<script>
var btn = document.getElementsByTagName("button")[0];
var oDiv = document.getElementsByTagName("div")[0]
btn.onclick = function () {
var timer = setInterval(function () {
var current = parseInt(getStyle(oDiv, "left"));
var speed = (500 - current) / 10;
speed = Math.ceil(speed);
console.log(speed);
if (current == 500) {
clearInterval(timer)
}
oDiv.style.left = current + speed + "px";
}, 50)
}
</script>
</body>
3缓冲动画来回运动
- 需求:从left值是1000的位置 缓冲到500的位置
- 问题2:往回运动的时候 永远无法达到目标值
- 分析:current是509的时候 speed的值是-0.9 Math.ceil之后就成了-0 speed的值最终是0 left值还是509 导致目标值永远都是509
- 解决:让speed向下取整 Math.floor
<body>
<button>起飞</button>
<div></div>
<p></p>
<script>
var btn = document.getElementsByTagName("button")[0];
var oDiv = document.getElementsByTagName("div")[0]
btn.onclick = function () {
var timer = setInterval(function () {
var current = parseInt(getStyle(oDiv, "left"));
var speed = (500 - current) / 10;
speed = Math.floor(speed);
console.log(current);
if (current == 500) {
clearInterval(timer)
}
oDiv.style.left = current + speed + "px";
}, 50)
}
</script>
</body>
- 来回运动speed值的问题
- 0-500 speed的值正数 Math.ceil
- 1000-500 speed的值是负数 Math.floor
<body>
<button>起飞</button>
<div></div>
<p></p>
<script>
var btn = document.getElementsByTagName("button")[0];
var oDiv = document.getElementsByTagName("div")[0]
btn.onclick = function () {
var timer = setInterval(function () {
var current