// obj 需要移动动画的盒子 target 是盒子移动到的距离 callback 新建回调函数
function animate(obj,target,callback) {
//clearInterval 清除的定时器
clearInterval(obj.time);
//创建一个时间定时器 setInterval
obj.time = setInterval(function(){
// obj.offsetLeft 获取obj盒子与页面最左边的的距离 ( target - obj.offsetLeft ) / 10
// var step =(target - obj.offsetLeft) /10 盒子缓动移动公式 (盒子移动到的距离-obj盒子与页面页面的最左边距离)除以10
var step =(target - obj.offsetLeft) /10; // 公式用使用除法会导致盒子无法到达指定的距离
// 修复除法的bug 距离为是正数就把浮点数向上取整 距离为是负数就把浮点数向下取整
var step = step > 0 ? Math.ceil(step):Math.floor(step);
if(obj.offsetLeft == target){
//判断obj盒子是否到达指定距离
//到达指定距离则清除定时器 让obj盒子在该距离停下 停止继续缓动
clearInterval(obj.time)
//停止后判断调用中有没有回调函数
if(callback){
//调用回调函数
callback();
}
}
// obj盒子定位的距离 = obj盒子与页面最左边的的距离 + 盒子移动距离 加上px是因为获取的数字不带px 定位中left不带px会导致无法定位
obj.style.left = obj.offsetLeft+step+"px";
}, 15); // 定时器多少毫秒运行一次
}
JavaScript 动画缓动函数
最新推荐文章于 2024-08-15 08:55:57 发布