TweenJS不尊重实例?

时间:2014-01-16 02:54:49

标签: javascript arrays tween createjs

情况

我需要循环遍历数组,并根据每个项的值运行补间。因此,对于数组中的每个项目,必须有一个单独的Tween实例。根据{{​​3}},get()方法"返回新的补间实例"。

问题

for循环中为数组中的每个项运行新补间时,似乎只有一个实例

守则

HTML

<div id='log'></div>

的Javascript

var items = [3,6,2,8,9,6];
var log = document.getElementById('log');

for(var i = 0; i < items.length; i++){
    var item = items[i];

    var start = {
        x: item * 10,
        y: item * 15
    };

    var end = {
        x: item * 10,
        y: item * 30
    };

    createjs.Tween
        .get(start, {
            onChange: function () {
                log.innerHTML = log.innerHTML + i + " - " +  JSON.stringify(start) + "<br/>";
            }
        })
        .to(end, 1000)
};

演示

TweenJS documentation - 注意输出。开头的数字是当前数组值的索引。它只显示最后一项。

理想情况下...

理想情况下,数组中的每个项目都会在其值之间单独补间。

提前致谢!

1 个答案:

答案 0 :(得分:2)

快速而肮脏的解决方案是在onChange中使用“event”参数,并检查其target.target属性。

诀窍在于它适用于所有事情,但变量范围是这样的,我开始不再包含你在事件方法触发时寻找的值。

这是改变:http://codepen.io/anon/pen/FhsHz

是的,正如我所料,它来自一个词汇范围问题......我不得不刷新自己,因为它已经有一段时间了,因为我不得不以这种方式处理Javascript(因而担心它!)

通读本指南,它非常有见地,并开始在“创建循环闭包”小节中解决您的问题以及解决它的方法:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

要点是,如果您希望创建的匿名函数使用在创建函数时捕获的值,则必须将最终使用的变量的范围设置为实际指向的状态期望值。

这很烦人,他们真的应该为你提供一个比“event.target.target”更直观的参数作为获得你所寻求的价值的地方,但另一种选择是做他们在这里做的事情。示例并且基本上创建一个函数生成函数,您将变量传递到该函数中。此时,函数使用的变量的范围成为“生成函数”中传入参数的范围,并且它将指向正确的值。你好吗。