情况
我需要循环遍历数组,并根据每个项的值运行补间。因此,对于数组中的每个项目,必须有一个单独的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 - 注意输出。开头的数字是当前数组值的索引。它只显示最后一项。
理想情况下...
理想情况下,数组中的每个项目都会在其值之间单独补间。
提前致谢!
答案 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”更直观的参数作为获得你所寻求的价值的地方,但另一种选择是做他们在这里做的事情。示例并且基本上创建一个函数生成函数,您将变量传递到该函数中。此时,函数使用的变量的范围成为“生成函数”中传入参数的范围,并且它将指向正确的值。你好吗。