Seit einiger Zeit erneut auszulösen bereits mit folgendem Code ich bin zu kämpfen:Wie eine Funktion mit Timeouts über Tasteneingabe
$(document).ready(function(){
keyBind();
});
var set = [];
var start = 0;
var total = 3;
var timeout = 1000;
function displayImages(i, total){
var pixBox = $('#picture-box');
var imgPre = 'resources/exhibit-';
var imgExt = '.png';
var sndExt = '.wav';
var imgSrc = '<img class="image" src="' + imgPre + i + imgExt +'">';
var sndSrc = new Audio(imgPre + i + sndExt);
var magic = ((i+1)%total) + ',' + total;
sndSrc.play();
pixBox.append(imgSrc);
var sT = setTimeout('displayImages(' + magic + ')', timeout);
set.push(sT);
if(sT >= total+1){
sndSrc.pause();
}
if(sT === total+1){
clearTimeout(sT);
// $('img').remove();
$('img:not(:last-child)').remove();
}
return false;
}
function keyBind(){
$(document).keydown(function(e) {
switch (e.which) {
case 75: //k
displayImages(start, total);
break;
case 80: //p
clearTimeout(set);
break;
default:
return;
}
e.preventDefault();
});
}
Es ist eine Art von sehr primitiv Diashow mit für jedes Bild/Dia-Sound-Dateien zu begleiten. Wie Sie sehen können, wird es durch Tastatureingabe gesteuert (keyBind
Funktion). Und alles funktioniert gut, aber nur zum ersten Mal. Wenn ich es triggere, timeOut
Funktion macht es Job und beide if
Anweisungen (zuerst verantwortlich für den Ton nach der letzten Datei schneiden, zweitens verantwortlich für das Wrapping Bilder zurück auf das erste nach dem letzten angezeigt wird) brennen und alles ist gut.
Das heißt, bis ich die Sequenz neu starten möchte, ohne zu aktualisieren. Wenn ich das tue, werden Sounddateien stumm und die Bildsequenz wird zu einer Endlosschleife.
Ich habe bereits versucht, Anfang und Ende der Sequenz in separaten Funktionen zu trennen, ich habe versucht, das Div zu löschen und den Sound am Anfang der Sequenz zurückzusetzen, und ich habe versucht, die timeOut
auch am Anfang zurückgesetzt. Alles vergebens. Haben Sie, liebe und gute Leute von SO, eine Ahnung, was mit meinem Code nicht stimmt, und können Sie etwas Licht darauf werfen? Es wird ein Lebensretter sein.
EDIT
Es sieht aus wie setTimeout(sT)
funktioniert nicht. Ich habe eine console.log
hinter ihm und sT
ist nicht 0, es hat immer noch ID der letzten Iteration. Was könnte die Ursache sein? Was mache ich falsch?
Ja, ich habe dieses Ding mit Array alleine erfunden. TBH Ich weiß nicht woher solche Ideen kommen. Aber es ist passiert. Aber das ist unbedeutend. Hauptsache ist DANKE! Tweaked es ein bisschen und es funktioniert wie ein Charme. Sie, mein Herr, sind fantastisch! – roonroon