Mam kod, który tworzy tablicę obiektową w warstwie, jak pokazano poniżej:

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

Problem polega na tym, że chcę ukryć obiekt po zakończeniu przewijania do lewej przy użyciu onfinish. Próbowałem użyć 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++;
            }
        }

Ale to wyzwalacze TypeError: LataLLeft [I] jest niezdefiniowany wszelkie pomysły? Proszę pomóż. Dzięki

1
Rhod 28 listopad 2013, 11:30

2 odpowiedzi

Najlepsza odpowiedź

Wydaje się być problemem zamknięcia. Czy mógłbyś to spróbować, nie jestem pewien, czy będzie działać, ale w każdym razie:

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++;
    }
}
0
Anto Jurković 28 listopad 2013, 08:23

Spróbuj debugować kod i sprawdzić i.
Myślę, że nie dlatego, że jesteś w pętli i wykonaj kod, gdy pętla została zakończona. Łatwo można rozwiązać ten problem z anonimową funkcją, aby wywołać zakres.

for(var i=0; i<labelCount; i++)
{
    (function(i){
    //put code here
    }(i))
}
0
A1rPun 28 listopad 2013, 08:05