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

这里面的fn是回调函数,再次调用它时this指向了window,不能循环执行startMove函数,如何解决

这里面的fn是回调函数,再次调用它时this指向了window,不能循环执行startMove函数,如何解决

qq_kathie周洁_0 2016-11-03 11:39:12
var lis=document.querySelectorAll('#all-panels li'); for(var i=0;len=lis.length,i<len;i++){     lis[i].timer=null;     lis[i].onmouseover=function(){      startMove3(this,{'width':400,'opacity':100},function(){      console.log(this);      startMove3.call(this,{'height':100,'font-size':18})      });     }     lis[i].onmouseout=function(){      startMove3(this,{'width':100,'opacity':30},function(){      startMove3(lis[i],{'height':50,'font-size':12})      });     } } function startMove3(obj,params,fn ){ clearInterval(obj.timer); var flag = true;//所有动画都达到目标值 obj.timer=setInterval(function(){ for(var attr in params){ var cur=0; if(attr == 'opacity'){ cur = Math.round(getObjStyle(obj,attr)*100); }else{ cur = parseInt(getObjStyle(obj,attr)); } var speed= (params[attr]- cur)/10; speed = speed>0 ?Math.ceil(speed) : Math.floor(speed); if(cur != params[attr]){ flag= false; } if(attr=='opacity'){ obj.style[attr] = (cur + speed)/100; }else{ obj.style[attr] = cur + speed +'px'; } if(flag){ clearInterval(obj.timer); if(fn){ fn(); } } } },30); } function getObjStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ return getComputedStyle(obj,false)[attr]; } }这种回调函数如何改变this的指向呢?我做了一个简单的,不是多物体的,就是把定义的对象传进去,那如果是多物体运动,如和改变回调函数的这个this的指向?请大神帮忙解决
查看完整描述

3 回答

?
咕咕问

TA贡献78条经验 获得超12个赞

this指的是当前对象 

function abc(){this   //abc方法的对象}

document.getElementbyId("xyz").abc();  这个this值的是这个元素对象

查看完整回答
反对 回复 2016-11-03
?
李晓健

TA贡献1036条经验 获得超461个赞

call  apply  bind都可以改变this指向,自己去找找相关的资料

查看完整回答
反对 回复 2016-11-03
  • qq_kathie周洁_0
    qq_kathie周洁_0
    谢谢了,我的初衷是想保存this不变,我觉得要使用call修改this的指向,但发现不行。
  • 3 回答
  • 1 关注
  • 1689 浏览
慕课专栏
更多

添加回答

举报

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