[英]Js function always return the same values
Js beginner here. Js初学者在这里。
I have a function like this:我有一个这样的功能:
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();
};
}
}
What it does is generate data from JSON and display animated elements one by one on delay.它的作用是从 JSON 生成数据并延迟显示动画元素。 Animation part work fine.动画部分工作正常。 I can assign required animations and delay to DOM elements and show them in right order.我可以为 DOM 元素分配所需的动画和延迟,并以正确的顺序显示它们。
But what I want to do in the same time is also to play an audio on delay (so I use setTimeout).但我同时想做的也是延迟播放音频(所以我使用 setTimeout)。 Everything is almost fine, I play audio in right time (correct delay value) but I always play the same audio (which is last element) because audioPlayer always is the same DOM node.一切都很好,我在正确的时间(正确的延迟值)播放音频,但我总是播放相同的音频(这是最后一个元素),因为audioPlayer始终是同一个 DOM 节点。
I think this have something to do with this or I mixed a scope?我认为这与此有关还是我混合了一个范围?
Try this:尝试这个:
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(audioPlayer),delay);
};
}
function playAudioOnDelay(audioPlayer){
return function(){
audioPlayer[0].pause();
audioPlayer[0].currentTime = 0;
audioPlayer[0].play();
}
}
}
Essentially, your problem looks like this: http://jsfiddle.net/po0rLnwo/本质上,您的问题如下所示: http : //jsfiddle.net/po0rLnwo/
The solution is : http://jsfiddle.net/gpfuo1s8/解决方案是: http : //jsfiddle.net/gpfuo1s8/
Check the console in your browser.检查浏览器中的控制台。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.