看了“尚硅谷”的js教学视频,学到的一个移动函数,且可以用于轮播图的动画处理
js 移动动画函数
obj: 要动画的对象
attr : 要进行的动画
target : 要达到的位置
speed : 移动速度
callback : 回调函数()
function move(obj,attr,target,speed,callback){
// 关闭上一个定时器
clearInterval(obj.timer);
// 获取元素目前的位置
var current = parseInt(getStyle(obj,attr));
//判断速度的正负值
//如果从0向目标位置 移动,则speed为正
//如果从目标位置 向 0 移动,则speed为负
if(current > target ){
//此时速度应为负值
speed = - speed;
}
// 开启一个定时器,用来执行动画效果
//向执行动画的对象中添加一个timer属性,用来保存他自己的标识
obj.timer = setInterval(function(){
// 获取box1的原来的left值
var oldValue = parseInt(getStyle(obj,attr));
//在旧基础上增加
var newValue = oldValue + speed;
//向左移动时,需要判断newValue是否小于target
//向右移动时,需要判断newValue是否大于target
if((speed < 0 && newValue < target) || (speed > 0 && newValue > target)){
newValue = target;
}
// 将新值赋给box1
obj.style[attr] = newValue + "px";
//当元素移动到0px是,使其停止执行动画
if (newValue == target) {
//达到目标,关闭定时器
clearInterval(obj.timer);
//动画执行完比,调用回调函数
// 使用&&符号用来处理是否有回调函数的问题
callback && callback();
}
},30);
}
// move函数中需调用的方法
处理兼容(???应该是)
function getStyle(obj,name){
if(window.getComputedStyle){
return getComputedStyle(obj,null)[name];
}else{
return obj.currentStyle[name];
}
}
// 回调函数中的内容会在方法执行完后在执行,
// 可以完成后续的添加操作