【发布时间】:2009-10-13 18:35:54
【问题描述】:
for (var i = 0; i < barValues.length; i++) {
actualBarHeight = Math.floor((barValues[i] / chartMaxY) * barchartHeight);
var barChartID = "#barChart" + (i + 1)
$(barChartID + " .value span").css('background-color', 'transparent');
$(barChartID + " img").animate({
height: actualBarHeight
}, 500, function () {
$(barChartID + " .value span").css('background-color', 'white');
}
);
$(barChartID + " .value span").html("$" + Math.floor(barValues[i]));
$(barChartID + " .value").css("bottom", actualBarHeight + "px");
$(barChartID + " .ylabel").html(chartMaxY);
}
上面的 jQuery 代码在一个 for 循环中。循环的每次迭代都执行以下操作:
- 设置跨度的背景
- 动画对象
- 完成后,重置 span 的背景
我正在使用回调函数来重置背景,以便它在这样做之前完成动画。但是,它最终只会影响 for 循环中引用的最后一个跨度。
如果我将那段代码移到回调之外,那么它会影响 for 循环的每次迭代中的每个跨度,(但在这种情况下不会等待动画)
我猜这个问题与在 animate 函数内部的函数内部构建选择器有关。我的标记中有一些不好的语法吗?
编辑(根据 Russ 的建议,我现在在上面的示例中包含完整的循环)
【问题讨论】:
-
@DA - 你能发布完整的代码,包括包络循环吗?听起来循环有问题(可能缺少闭包),所以最好看看循环看看它是如何实现的
-
Russ:好建议。我已经更新了示例。
-
仅供参考,它是完全循环的,因为它在每组元素的循环中执行所有其他操作。奇怪的似乎是试图修改 .animate 的回调函数中的任何内容