我正在为需要构建一个未知长度的嵌套回调函数的情况编写代码。它是创建一个序列化的动画队列来将一个元素移动到一个未知的位置。
例如,输出看起来像这样,其中嵌套了 X 'complete' 回调:
$('#element').animate(css, { complete: function () {
$('#element').animate(css, { complete: function () {
// more nested calls inside
}
});
现在我将这些函数生成为字符串,然后在完成后将其提供给 new Function():
myFunc = new Function(generatedFuncString);
内容是可信的,但这仍然使用具有负面性能影响的 eval()。我只是想知道是否有另一种/更好的方法?
编辑:我这样做的原因是因为我有一组非常复杂的动画要执行并且在 jQuery 动画队列之外工作。如果有人对如何完成这样的情况有更好的建议,那将是有帮助的......
想象一个棒球场,第一名是跑步者(A),第三名是跑步者(B)。在一个动画包中,我想将跑步者 A 设置为第 3 名(中间停在第 2 名,2 次前进),并将跑步者 B 设置为 HOME(1 次前进)。
我必须用“queue: false”启动初始推进,以便跑垒员 A 和 B 同时移动到他们的一垒(跑垒员 A 到第二垒,跑垒员 B 到家)。
当 Runner A 完成移动到第二个时,我想将他移动到第三个(因此以编程方式构建一个带有嵌套回调的 animate() 调用以确保保留此顺序)。
我通过字符串构造函数的原因是因为我知道最里面的回调将首先是什么,然后从那里递归构造1个或多个外部回调。我无法通过将函数用作对象并保持所有引用保持完整来找到一种方法。
请记住,这是一个简单的示例。想象一下,当基地被加载时,我需要制作一个大满贯的动画(所有 4 名跑步者都绕着所有基地,来自家乡的跑步者需要在跑回家乡之前停下 3 次)。等等等等。