/*
* //obj:对象 ;attr:属性 dir:步长 target:终点目标 endFn:回调函数
* move(obj, "attr", dir, target, endFn//function(){回调执行事件})
* 注释*1
* obj.onOff
* 防止定时器插队
* 当函数执行时该值将成为不可执行值
* 知道定时器执行完成后改变该值
*
* 注释*2
* 回调函数
* 判断当前函数是否存在
* 如果存在就执行
* */
function move(obj, attr, dir, target, endFn) {
var dir = parseInt(getStyle(obj, attr)) < target ? dir : -dir //判断正负:三元表达式
if(!obj.onOff) { //注释*1
obj.onOff = true
timer = setInterval(function() {
var speed = parseInt(getStyle(obj, attr)) + dir; //步长
if(speed > target && dir > 0 || speed < target && dir < 0) { //判断方向
speed = target;
}
obj.style[attr] = speed + "px"; //执行当前函数要求
if(speed == target) { //判断当前事件是否已经完成
clearInterval(timer); //已经完成,清除定时器
//console.log(parseInt(getStyle(obj, attr))) 数据检查
obj.onOff = false //注释*1
if(endFn) { //注释*2
endFn();
}
}
}, 15)
}
}
function getStyle(obj, attr) { //getStyle() 获取元素当前属性值
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr]
}