<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
div{
width: 200px;
height: 200px;
position: absolute;
left: 0;
background-color: pink;
}
</style>
<body>
<button>点击</button>
<div></div>
<script>
var div = document.querySelector('div');
var btn = document.querySelector('button');
//封装
//匀速运动
//动画想要懂必须要定位
//当我们不断点击按钮,这个元素的运动速度会越来越快,因为开启了太多的定时器
//解决方案,先清除以前的定时器,只保留当前的定时器执行
var timer = setInterval(function (){
if(div.offsetLeft >= 400){
clearInterval(timer);
}
div.style.left = div.offsetLeft + 5 + 'px'
},30);
function animate(obj,target){
clearInterval(obj.timer);
obj.timer = setInterval(function (){
//步长值写到定时器里面
// var step = (target - obj.offsetLeft) / 10 ;
if(obj.offsetLeft >= target){
clearInterval(obj.timer);
}
obj.style.left = obj.offsetLeft + 5 + 'px'
},30);
}
//2.减速
//1.让盒子每次移动的距离慢慢变小,速度就会慢下来
//2.核心算法(目标值 - 现在的位置)/10 作为每次移动的距离 步长
//3.停止的条件,让盒子位置等于目标位置就停止定时器
// function animate(obj,target,cellback){
// clearInterval(obj.timer);
// obj.timer = setInterval(function (){
// //步长值写到定时器里面
// // var step = Math.ceil((target - obj.offsetLeft) / 10) ;//!!!!!!
// var step = (target - obj.offsetLeft) / 10;
// step = step > 0 ? Math.ceil(step) :Math.floor(step);
// console.log(obj.offsetLeft)
// if(obj.offsetLeft == target){
// clearInterval(obj.timer);
// }
// obj.style.left = obj.offsetLeft + step + 'px'
// },30);
// }
// btn.addEventListener('click',function (){
// animate(div,300)
// })
//匀速运动 就是盒子当前的位置 + 固定的值
//缓动动画就是 盒子当前的位置 + 变化的值((目标值 - 现在的位置)/ 10 )
</script>
</body>
</html>
编写匀速,减速动画
最新推荐文章于 2024-08-27 13:38:21 发布