日期:2014-05-16  浏览次数:20367 次

求解一段js代码?看不太懂
function css(obj, attr, value)
{
if(arguments.length==2)
{
if(attr!='opacity')
{
return parseInt(obj.currentStyle?obj.currentStyle[attr]:document.defaultView.getComputedStyle(obj, false)[attr]);
}
else
{
return Math.round(100*parseFloat(obj.currentStyle?obj.currentStyle[attr]:document.defaultView.getComputedStyle(obj, false)[attr]));
}
}
else if(arguments.length==3)
switch(attr)
{
case 'width':
case 'height':
case 'paddingLeft':
case 'paddingTop':
case 'paddingRight':
case 'paddingBottom':
value=Math.max(value,0);
case 'left':
case 'top':
case 'marginLeft':
case 'marginTop':
case 'marginRight':
case 'marginBottom':
obj.style[attr]=value+'px';
break;
case 'opacity':
obj.style.filter="alpha(opacity:"+value+")";
obj.style.opacity=value/100;
break;
default:
obj.style[attr]=value;
}
return function (attr_in, value_in){css(obj, attr_in, value_in)};//这个返回函数有什么用?他的参数attr_in,value_in上面都没有啊???

}

var MIAOV_MOVE_TYPE={
BUFFER: 1,
FLEX: 2
};

function miaovStopMove(obj)
{
clearInterval(obj.timer);//这个obj有timer属性吗?这是自己定义的嘛?我没看的过这个属性
}

function miaovStartMove(obj, oTarget, iType, fnCallBack, fnDuring)
{
var fnMove=null;
if(obj.timer)
{
clearInterval(obj.timer);
}

switch(iType)
{
case MIAOV_MOVE_TYPE.BUFFER:
fnMove=miaovDoMoveBuffer;
break;
case MIAOV_MOVE_TYPE.FLEX:
fnMove=miaovDoMoveFlex;
break;
}

obj.timer=setInterval(function (){
fnMove(obj, oTarget, fnCallBack, fnDuring);//这个函数最后两个函数有什么用???
}, 30);
}

function miaovDoMoveBuffer(obj, oTarget, fnCallBack, fnDuring)
{
var bStop=true;
var attr='';
var speed=0;
var cur=0;

for(attr in oTarget)
{
cur=css(obj, attr);
if(oTarget[attr]!=cur)
{
bStop=false;

speed=(oTarget[attr]-cur)/5;
speed=speed>0?Math.ceil(speed):Math.floor(speed);

css(obj, attr, cur+speed);
}
}

if(fnDuring)fnDuring.call(obj);

if(bStop)
{
clearInterval(obj.timer);
obj.timer=null;

if(fnCallBack)fnCallBack.call(obj);//这行代码完全看不懂
}
}

function miaovDoMoveFlex(obj, oTarget, fnCallBack, fnDuring)
{
var bStop=true;
var attr='';
var speed=0;
var cur=0;

for(attr in oTarget)
{
if(!obj.oSpeed)obj.oSpeed={};
if(!obj.oSpeed[attr])obj.oSpeed[attr]=0;
cur=css(obj, attr);
if(Math.abs(oTarget[attr]-cur)>=1 || Math.abs(obj.oSpeed[attr])>=1)
{
bStop=false;

obj.oSpeed[attr]+=(oTarget[attr]-cur)/5;
obj.oSpeed[attr]*=0.7;

css(obj, attr, cur+obj.oSpeed[attr]);
}
}

if(fnDuring)fnDuring.call(obj);

if(bStop)
{
clearInterval(obj.timer);
obj.timer=null;

if(fnCallBack)fnCallBack.call(obj);
}
}
希望能完全讲解一下这段代码的全部运行调用过程!上面只是标注了几点看不懂,其实后面两个函数方法完全没看懂!