2

私のコード:

for ループがすべての配列要素を変数 pickSound に割り当てることを理解しています。そのため、最後の要素のみを再生することになります。では、各要素を順番に再生し、完了したら最初からやり直すにはどうすればよいでしょうか。

 function show() {
        var sounds = new Array(
            "audio/basement.mp3",
            "audio/roll.mp3",
            "audio/gatorade.mp3",
            "audio/half.mp3",
            "audio/hotdogs.mp3",
            "audio/keys.mp3",
            "audio/heil.mp3",
            "audio/money.mp3",
            "audio/ours.mp3",
            "audio/pass.mp3"
        );

        for (var i = 0; i < sounds.length; i++){
    var pickSound = sounds[i];     
        }

        $('#divOne').html("<embed src=\""+ pickSound +"\" hidden=\"true\" autostart=\"true\" />");
        return false;
    };
4

2 に答える 2

2

audio要素とendedイベントを使用してみることができます。

HTML:

<audio id="audio" controls preload></audio>

JS:

(function() {
    var audioEl = document.getElementById('audio'),
        counter = -1,
        songs = [
            'http://forestmist.org/wp-content/uploads/2010/04/html5-audio-loop.mp3',
            'http://www.quackit.com/music/good_enough.mp3',
            'http://forestmist.org/wp-content/uploads/2010/04/html5-audio-loop.mp3',
            'http://www.quackit.com/music/good_enough.mp3'];

    function nextSong() {
        audioEl.removeEventListener('ended', nextSong);

        if (songs[++counter]) {
            audioEl.src = songs[counter];
            audioEl.addEventListener('ended', nextSong);
            audioEl.play();
        } else {
            alert('All done!');
        }
    }

    nextSong();
}());​

デモ

于 2012-11-27T20:33:53.727 に答える
1

「ボタンをクリックするたびに新しいサウンドが再生されることを追加する必要がありました。したがって、いつでも新しいサウンドを再生できます。」

私は、サウンドが自動ループで連続して再生されないことを意味すると考えています。ボタンをクリックして、次の音を再生してから停止するつもりですか?

次のコードでは、nextSound変数は次に再生するサウンドのインデックスを保持します。ボタンがクリックされると (必要に応じてボタンの ID または他のセレクターを挿入します)、そのインデックスに関連付けられたファイル名が使用され、モジュラス演算子nextSoundを使用してインクリメントされ、配列の最後に到達するとゼロにループバックします。

$(document).ready(function() {
   var sounds = ["audio/basement.mp3",
                 "audio/roll.mp3",
                 "audio/gatorade.mp3",
                 "audio/half.mp3",
                 "audio/hotdogs.mp3",
                 "audio/keys.mp3",
                 "audio/heil.mp3",
                 "audio/money.mp3",
                 "audio/ours.mp3",
                 "audio/pass.mp3"],
       nextSound = 0;

    $("#yourButtonIDHere").click(function() {
       $('#divOne').html("<embed src=\""+ sounds[nextSound] +"\" hidden=\"true\" autostart=\"true\" />");
       nextSound = (nextSound + 1) % sounds.length;
    });
});

また、通常は、[]ではなく角括弧配列リテラル構文を使用して配列を宣言することをお勧めしますnew Array()

于 2012-11-27T20:26:34.037 に答える