谁能告诉我这是什么错?

      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);

}}

http://img.mukewang.com/581cac740001d64c13610655.jpg

小猪fenny
浏览 1112回答 1
1回答

stone310

因为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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript