//1.简单动画
/*尝试构造一个可以执行简单动画的函数
* -参数:
* obj:要执行动画的对象
* attr:要执行动画的样式,如left top width height
* target:执行动画的目标位置
* speed:移动的速度(正数右移,负数左移)
* callback:回调函数,这个函数会在动画执行完毕以后执行
*/
//move(imgList,"left",-320*index,20,function(){
//
// });
function move(obj, attr, target, speed, callback) {
//关闭上一个定时器,防止加速
clearInterval(obj.timer);
//获取元素目前的位置
var current = parseInt(getStyle(obj, attr));
//判断速度的正负
//如果从0到800移动,则speed为正,800到0移动,为负
if(current > target) {
//此时speed为负
speed = -speed;
}
//-开启一个定时器,来执行动画效果
obj.timer = setInterval(function() {
//获取目标原来的left值
var oldValue = parseInt(getStyle(obj, attr));
//在旧值的基础上增加
var newValue = oldValue + speed;
if((speed < 0 && newValue < target) || (speed > 0 && newValue > target)) {
newValue = target;
}
//将新值设置给目标
obj.style[attr] = newValue + "px";
if(newValue == target) {
//到达目标值,关闭定时器
clearInterval(obj.timer);
//动画执行完毕,调用回调函数
callback && callback();
}
}, 30);
}
//2.class的操作
/*定义一个元素,来获取指定元素的当前的样式
* -参数:
* obj:要获取样式的元素
* name:要获取的样式名
*/
//getStyle(box, "d2");
function getStyle(obj, name) {
return getComputedStyle(obj, null)[name];
}
/*定一个函数来用来想一个元素中动态添加指定的class属性值
* -参数:
* obj 目标元素
* cn 要添加的class值
*/
function addClass(obj,cn){
//判断,防止cn有了还执行函数多次添加
if(!hasClass(obj,cn)){
obj.className += " "+cn;
}
}
/*判断一个元素中是否含有指定的class属性值
* 如果有,返回true
*/
function hasClass(obj,cn){
//判断obj中有没有cn class,正则表达式
var reg=new RegExp("\\b"+cn+"\\b");
return reg.test(obj.className);
}
/*删除一个元素中的指定class属性值
*/
function removeClass(obj,cn){
//创建一个正则表达式
var reg=new RegExp("\\b"+cn+"\\b");
//删除跟正则式符合的class
obj.className=obj.className.replace(reg," ");
}
/*切换一个class
* 如果元素中有该class,则删除;没有,则添加
*/
function toggleClass(obj,cn){
if(hasClass(obj,cn)){
removeClass(obj,cn);
}else{
addClass(obj,cn);
}
}