window.onload = function(){ var oList = document.getElementsByTagName('li'); for (var i = 0; i < oList.length; i++) { oList[i].timer=null; oList[i].onmouseover=function(){ startMove(this,'width',400,function(){ startMove(this,'height',200); }); } oList[i].onmouseout=function(){ startMove(this,'height',100,function(){ startMove(this,'width',200); }); } }//获取属性function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ return getComputedStyle(obj,false)[attr]; }}function startMove(obj,attr,iTarget,fn){ clearInterval(obj.timer); obj.timer = setInterval(function(){ obj.alpha=30; var icur =null; //1.判断类型 if(attr=='opacity'){ icur=Math.round(parseFloat(getStyle(obj,attr))*100); } else{ icur= parseInt(getStyle(obj,attr)); } //计算速度 var speed =(iTarget-icur)/8; speed=speed>0?Math.ceil(speed):Math.floor(speed); //3.检测停止 if(icur == iTarget){ clearInterval(obj.timer); if(fn){ //判断是否存在回调函数,并回调 fn(); } }else{ if(attr=='opacity'){ obj.style.filter='alpha(opacity:'+(icur+speed)+')'; obj.style.opacity=(icur+speed)/100; }else{ obj.style[attr]= icur +speed+'px'; } }},30);}}
1 回答
已采纳
stone310
TA贡献361条经验 获得超191个赞
因为this值变化了;getComputedStyle无法成功获取机会报错,事件内部的回调不能再用this,要先用变量保存原来的this,再调用保存的变量,mouseout事件同理,如下:
oList[i].onmouseover=function(){ var self=this; //将this保存到self startMove(this,'width',400,function(){ startMove(self,'height',200); //这里的this是指window,使用self
添加回答
举报
0/150
提交
取消