Mit Javascript habe ich eine Funktion, die ein Audioelement mit createElement("audio")
erstellt und in loop spielt, ohne appendChild()
zu verwenden, also ohne es an das DOM anzuhängen.
Das erzeugte Element wird in einer Variablen gespeichert, nennen wir es music1
:
Was ich tun möchte, ist, die gespielte Musik zu ändern, wenn möglich mit derselben Funktion, und das Element in derselben Variablen zu speichern.
Was ich mache ist das vor dem obigen Code:
%Vor% Aber: Wenn ich music.pause()
entferne, spielt die erste Musik weiter, und die zweite beginnt gleichzeitig zu spielen, was mich denken lässt, dass die erste Musik immer irgendwo im Dokument / im Speicher ist. Außerdem scheint music = null
nutzlos zu sein. Ich möchte jQuery nicht verwenden.
Haben Sie eine Idee, die erste Musik richtig zu entfernen, das Element zu löschen oder so?
Tatsächlich ist der Kommentar von kennis richtig, ich habe versucht, nur das src-Attribut zu ändern und nicht die Variable "music" zu ändern (weder auf null setzen noch ein Element neu erstellen), und es scheint auch zu funktionieren. Also, für die Aufzeichnung: Für jede Quelle, die sich hier ändert, ist die Funktion:
%Vor%anstatt zu löschen, wäre es besser, die src
zu ändern %Vor%Auf diese Weise haben Sie immer mit dem gleichen Objekt zu tun, so dass Sie das DOM seltener drücken, und Sie vermeiden auch das Problem, zwei Spieler gleichzeitig zu haben
Stellen Sie außerdem sicher, dass Sie die .load-Methode verwenden, um das neue Audio zu laden, andernfalls wird das alte wieder abgespielt.
Das ursprüngliche Objekt wird gelöscht, aber nur, wenn der Garbage Collector feststellt, dass es Zeit ist. Die Tatsache, dass es audio
ist, kann die Dinge komplizieren und es dem Browser erschweren, diese Entscheidung zu treffen.
Also, verwenden Sie stattdessen einfach das ursprüngliche Objekt.
Tags und Links javascript html5 audio