0

だから私はこのような関数を持っています:

function music(song) {
var audio = new Audio("audio/" + song + ".ogg");
audio.play();
}

そして、私が抱えている問題は、 audio.play() が完全に機能することですが、後で (同じ変数を定義した後に) audio.pause() を試しても機能しません。ただし、これを行うと:

function music() {
var audio = document.getElementById("songname");
audio.play();
}

次に変数を定義し、後で audio.pause() を使用してトラックを一時停止します。問題は、多くのトラックがあり、それぞれのオーディオ要素を作成したくないため、javascript 内でこれを実行したいということです。

最初のコードでオーディオを後で一時停止できないのはなぜですか? 後でオーディオを一時停止させる方法はありますか? そうでない場合は、曲のタイトルであるパラメータを渡して JavaScript からオーディオを再生する代替手段はありますか? HTMLにsrcを含める必要はありません。

jQueryにはこれに対する簡単な解決策があるのではないかと思いますが、調査した結果、何も見つかりませんでした。

4

3 に答える 3

1

audio関数内にのみ存在します。関数の外でアクセスする必要がある場合は、Audio作成しているオブジェクトのインスタンスを返します。

function getAudio(song, play) {
var audio = new Audio("audio/" + song + ".ogg");
  if(play) {
    audio.play();
  }

  return audio;
}

var theTrack = getAudio('my_song', true);
theTrack.pause(); // pause the song
theTrack.play();  // play the song

2番目の例は、オブジェクトの機能を公開するオーディオ要素であると私が想定しているものを参照していAudioます。2 番目の関数がどこでも機能する理由は、DOM 要素が常に DOM に存在し、Audio オブジェクト/API を直接使用するのではなく、DOM 要素を参照して基になる Audio API を取得するためです。

于 2012-05-11T03:12:35.577 に答える
0

スニペットをテストしたところ、そのように機能します

function music(song) {

    var audio = new Audio("audio/" + song + ".ogg");
    audio.play();
    setTimeout(function() { audio.pause(); }, 5000);

}
于 2012-05-11T03:12:51.333 に答える