tools.js

//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);
            }
        }
    
原文地址:https://www.cnblogs.com/wangdongwei/p/11331514.html