为什么实现不了同时运动
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
<style>
*{
margin:0;
padding:0;
}
#ul1 li{
width:150px;
height:100px;
margin-top: 20px;
background: red;
border:1px solid green;
opacity: 0.8;
filter:alpha(opacity=80);
/*加上边框后,会导致offsetwidth变宽*/
/*position:relative;*/
}
</style>
</head>
<body>
<ul id="ul1">
<li></li>
<li></li>
<li></li>
</ul>
<script>
var ul1=document.getElementById("ul1");
var lis=ul1.getElementsByTagName("li");
//获取非行间样式
function getStyle(obj,name){
if(obj.currentStyle){
return obj.currentStyle[name];
}else{
return getComputedStyle(obj,false)[name];
}
}
// for(var i=0;i<lis.length;i++){
//数组是对象,给对象设置一份属性值;设置不同的数组的定时器,使多物体运动时相互不受影响
// lis[i].n=null;
//链式运动
// lis[0].onmouseover=function(){
// move(this,'opacity',30);
//// alert(1)
// }
//
// lis[0].onmouseout=function(){
// move(this,'opacity',80);
// }
// }
//链式运动
// lis[1].onmouseover=function(){
// move( lis[1],'height',260,function(){
// move(lis[1],'width',300,function(){
// move(lis[1],'opacity',30)
// })
// });
//// alert(1)
// }
//
// lis[1].onmouseout=function(){
// move(lis[1],'width',150,function(){
// move(lis[1],'height',100)
// });
// }
//同时运动
lis[0].onmouseover=function(){
move(lis[0],{'opacity':20,'width':300})
}
function move(obj, json,fn){
//清除与调用计时器
//attr是json内的name
var flag=true;
for(var attr in json){
clearInterval(obj.n);
obj.n=setInterval(function(){
// console.log(obj.offsetWidth)
//当有边框时不能用offsetWidth,而要用clientwidth或者
//是通过获取非行间样式的方法或的width(getStyles)
var cur=0;
//判断是哪种类型
if(attr=="opacity"){
cur=parseFloat(getStyle(obj,attr))*100;
}else{
cur=parseInt(getStyle(obj,attr))
}
//计算速度
var speed=(json[attr]-cur)/10;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
//给对象赋值
if(cur!=json[attr]){
flag=false;
}
if(attr=="opacity"){
obj.style.opacity=(cur+speed)/100;
obj.style.filter="alpha(opacity:"+cur+speed+")"
}
else{
obj.style[attr]=cur+speed+"px";
}
if(flag){
clearInterval(obj.n)
if(fn){
fn();
}
}
},17)
}
}
</script>
</body>
</html>