2013-11-28 19 views
1

我有一个创建的层中的对象阵列,如下所示的代码:动力学JS onFinish隐藏节点数组

var labels = layer.get('Label'); 
    var labelCount = labelLeft.length; 

    var tweens = []; 
    var tweenCounter = 1; 

    var duration=5; 
    for(var i=0; i<labelCount; i++) 
    { 
     var tween = new Kinetic.Tween({ 
      node: labelLeft[i], 
      duration: animspeed[i], 
      x: 0, 
      onFinish: function() { 
       if (tweenCounter !== labelCount) { //Prevent an undefined tween from being played at the end 
        tweens[tweenCounter].play(); 
        tweenCounter++; 
       } 
      } 
     }); 
     tweens.push(tween); 
    } 
    tweens[0].play(); 

的问题是,我想隐藏一旦做滚动使用onFinish离开对象。我试着用labelLeft [I] .hide()

onFinish: function() { 
      labelLeft[i].hide(); 
      if (tweenCounter !== labelCount) { //Prevent an undefined tween from being played at the end 
       tweens[tweenCounter].play(); 
       tweenCounter++; 
      } 
     } 

但这种触发类型错误:labelLeft [i]是未定义 任何想法?请帮忙。谢谢

回答

0

这似乎是关闭问题。你可以试试这个,我不知道这是否会工作,但无论如何:

for(var i=0; i<labelCount; i++) 
{ 
    var label = labelLeft[i]; 
    var tween = new Kinetic.Tween({ 
     node: labelLeft[i], 
     duration: animspeed[i], 
     x: 0, 
     onFinish: function(l) { 
      return function() 
       hide(l); 
     }(label) 
    }); 
    tweens.push(tween); 
} 

function hide(label) { 
    labelLeft[label].hide(); 
    if (tweenCounter !== labelCount) { //Prevent an undefined tween from being played at the end 
     tweens[tweenCounter].play(); 
     tweenCounter++; 
    } 
} 
+1

'return function()hide(l);'可能会产生一个错误。我知道你在做什么,但它非常接近我的解决方案。两者都会起作用,因为它们会产生封闭。 – A1rPun

+1

@ A1rPun:老实说,我不确定我的_solution_是否可以工作。关闭是我的黑暗地区 –

+1

他们不应该! [检查这个SO页面](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work);) – A1rPun

0

尝试调试您的代码并检查i是否定义。
我认为这并不是因为你在for循环中并在循环结束时执行代码。你可以很容易地用一个匿名函数来解决这个问题来引发一个范围。

for(var i=0; i<labelCount; i++) 
{ 
    (function(i){ 
    //put code here 
    }(i)) 
} 
+0

'i'定义,但labelLeft [i]是不是因为'i'最有可能是一次性的,当onFinish被调用。这是关闭问题。 –

+0

谢谢你,让我试试看,并通知你是否会工作:) – Rhod