move function -- edition 2 ---chain-- 目前的运动框架不能让好几个值同时动,比如让一个div的宽和高同时增加,那么 { startMove(oDiv,'height',300); startMove(oDiv,'width',300); } 这样是行不通的,因为第一个startMove刚开,其中的定时器打开,这时候第二个startMove一开,首先先把那个定时器给关掉了,所以只会执行第二个startMove的函数 function getStyle(obj,name) { if(obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj,false)[name]; } } function startMove(obj,name,iTarget,fnEnd) { //关定时器 clearInterval(obj.timer); //打开定时器 obj.timer = setInterval(function() { //设定变量,和 Itarget 决定了步长 speed var cur= 0; // 如果属性是opacity 怎么取数字 if (name == 'opacity') { cur = Math.round(parseFloat(getStyle(obj,name))*100); } else { cur= parseInt(getStyle(obj,name)); //这个时候传入的都是其他的样式如width等 } // 设定变化的速度,渐变,所以还要取整 var speed = (iTarget-cur)/6; speed = speed>0 ? Math.ceil(speed) :Math.floor(speed); // 是否到达 if (cur == iTarget) { clearInterval(obj.timer); if(fnEnd)fnEnd(); //注意在clearInterval后面需要添加 if(fnEnd)fnEnd();即,如果这个结束函数传进来了,就调用 } else { if(name == 'opacity') { obj.style.filter='alpha(opacity:'+(cur+speed)+')'; obj.style.opacity=(cur+speed)/100; //document.getElementById('txt1').value = obj.style.opacity; } else { obj.style[name] = cur+speed+'px'; } } }, 30); }