Ich versuche Sound und Animation zu diesem "Ping-Pong" (Fizz-Buzz) -Programm hinzuzufügen. Was ich will, ist, dass für jedes Element im Array (Nummer/Ping/Pong/Pingpong) der Text in der Liste eingeblendet wird, während der Sound und die Animation abgespielt werden.Wie koordiniere ich das Timing für Sound und Animation?
Was ich bekomme ist - die ganze Liste blendet alle auf einmal ein, die Sounds spielen alle nacheinander (und wenn die eingegebene Nummer groß ist, geht es für immer weiter), aber die Animation passiert nur einmal (anscheinend für nur die letzte Animation). Das gesamte Projekt befindet sich unter: https://github.com/karenfreemansmith/Epic-AdvancedJSwk1-PingPongCalculator, zusammen mit einem Link zu einer Seite mit dem, was gerade funktioniert. (Ein wenig früher als der Code unten, die es nur auf neue Weise gebrochen.)
Ich habe setInterval und setTimeout versucht, sie alle durch den Aufruf einer Funktion für die Synchronisierung zu verwenden, die zu einem Zeitpunkt ein Element zeigen mit seinem Sound und Animation:
var play=setInterval(function() {
var i=1;
output.forEach(item => {
showNext(item);
if(i>=output.length) {
clearInterval(play);
}
i++;
});
}, 1000);
und sucht die Funktion wie folgt aus:
function showNext(item) {
acorn.style.animation= "";
acorn.style.webkitAnimation="";
if(item==="ping") {
window.setTimeout(playPing(), 1000);
} else if(item==="pong") {
window.setTimeout(playPong(), 1000);
} else if(item==="ping-pong") {
window.setTimeout(playVolley(), 1000);
} else {
window.setTimeout(playMiss(), 1000);
$("#pingpong").append("<p class='"+item+"'>" + item + "</p>");
}
}
und die Spielfunktionen sind alle im Grunde das gleiche, aber mit verschiedenen Sounds:
function playPing() {
acorn.style.animation= "ping 1s linear";
acorn.style.webkitAnimation="ping 1s linear";
sndSlam1.currentTime = 0;
sndSlam1.play();
$("#pingpong").append("<p class='ping'>ping</p>");
}
Ich denke, ich muss missverstehen, wie die setTimeout funktioniert. Warum wird die Animation nur einmal abgespielt? Und warum gibt es keine Pause zwischen den Elementen, die der Liste hinzugefügt werden?
Siehe [HTML5 Audio-Streaming: präzise Latenz messen?] (Http://StackOverflow.com/Questions/38768375/HTML5-Audio-Streaming-precisely-Measure-Latency/) – guest271314
Ich bin nicht Streaming der Audio, nur Verwenden von MP3-Dateien zum Abspielen von Ping-Pong-Sounds. Es sieht so aus, als ob die Ereignisse hier hauptsächlich prüfen, ob die Datei heruntergeladen wurde oder nicht. – KAS
Das Medium wird abgerufen, dann können 'timeupdate'- oder' progress'-Ereignisse verwendet werden, um '.currentTime' der Medienwiedergabe zu bestimmen, um bestimmte Stile oder Animationen anzuwenden. – guest271314