Js初学者。
我有这样的功能:
generateSteps: function() {
var stepsLength = this.data.steps.length;
var dataStepsInit = this.data.steps;
for (var i = 0; i < stepsLength; i++) {
var stepsItem = dataStepsInit[i].ITEM;
var arrayItem = this.animationNodes[stepsItem - 1];
var transition = this.animationParameters[i].transition;
var options = this.animationParameters[i].options;
var speed = this.animationParameters[i].speed;
var delay = this.animationParameters[i].delay;
arrayItem.delay(delay).show(transition, options, speed);
if (dataStepsInit[i].AUDIOID) {
var audioClass = dataStepsInit[i].AUDIOID;
var audioPlayer = this.template.find("audio." + audioClass);
setTimeout(playAudioOnDelay,delay);
};
var playAudioOnDelay = function() {
audioPlayer[0].pause();
audioPlayer[0].currentTime = 0;
audioPlayer[0].play();
};
}
}
它的作用是从JSON生成数据并在延迟时逐个显示动画元素。动画部分工作正常。我可以为DOM元素分配所需的动画和延迟,并以正确的顺序显示它们。
但我想在同一时间做的也是延迟播放音频(所以我使用setTimeout)。一切都很好,我在正确的时间播放音频(正确的延迟值),但我总是播放相同的音频(这是最后一个元素)因为 audioPlayer 总是相同的DOM节点。
我认为这与这个或我混合了一个范围有关?
答案 0 :(得分:2)
试试这个:
BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT
基本上,您的问题如下所示:http://jsfiddle.net/po0rLnwo/
解决方案是:http://jsfiddle.net/gpfuo1s8/
在浏览器中查看控制台。