为了账号安全,请及时绑定邮箱和手机立即绑定

谁能告诉我这是什么错?

谁能告诉我这是什么错?

小猪fenny 2016-11-04 23:44:55
      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


查看完整回答
2 反对 回复 2016-11-05
  • 1 回答
  • 0 关注
  • 1111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信