A-A+

运动框架

2015年11月15日 JavaScript 暂无评论 阅读 48 次
    //			获取元素当前样式
function getStyle(obj, sStyle, sValue) {
    //传参后 a等价于 arguments[0]
    if (arguments.length == 2) {
        if (obj.currentStyle) {
            return obj.currentStyle.sStyle;
        } else {
            return getComputedStyle(obj, false)[sStyle];
        }
    } else if (arguments.length == 3) {
        obj.style[sStyle] = sValue;
    }
}

//    运动框架


var attr = null;
var Timer =null;
var aTime = 8;
//    可直接规定速度,也可以用时间参数计算速度
//    var isSpeed = 9;
function startMove(obj,json,fn) {
    clearInterval(obj.Timer);

    obj.Timer = setInterval(function () {
        var oTrue = true;   //标志这次运动整体结束,以防有某个参数提前结束后定时器关闭
        for (var attr in json){

            var iAttr = 0;
            if (attr == "opacity") {
                //            多运用一次parseInt是为了防止计算机对于小数 出错
                iAttr = parseInt(parseFloat(getStyle(obj, attr)) * 100);

            } else {
                iAttr = parseInt(getStyle(obj, attr));
            }
            //            根据时间参数计算速度
            var isSpeed = (json[attr] - iAttr) / aTime;
            isSpeed = isSpeed > 0 ? Math.ceil(isSpeed) : Math.floor(isSpeed);
            if(iAttr != json[attr]){
                oTrue =false;
            }

            //直接规定每次的变快速度,速度不变
            //            当前速度大于目标,速度为负数
            //            if (iAttr > json[attr]) {
            //                isSpeed = -isSpeed;
            //            }
            //            if (Math.abs(iAttr - json[attr])<Math.abs(isSpeed)) {
            //                clearInterval(obj.Timer);
            //                obj.Timer =null;
            //                if(attr =="opacity"){
            //                    obj.style.filter='alpha(opacity='+json[attr]+')';
            //                    obj.style.opacity=+json[attr]/100;
            //
            //                }else{
            //                    obj.style[attr] = json[attr] + "px";
            //                }
            //
            //            }

            if (attr == "opacity") {
                obj.style.filter = 'alpha(opacity=' + iAttr + ')';
                obj.style.opacity = (iAttr + isSpeed) / 100;
            }
            else {
                obj.style[attr] = iAttr + isSpeed + "px";

            }

        }
        if (oTrue == true) {
            clearInterval(obj.Timer);
            if(fn){
                fn();
            }
        }

    }, 30)
}
标签:

给我留言

Copyright © web前端技术开发个人博客 保留所有权利  京ICP备14060653号 Theme  Ality

用户登录