Javascript: воспроизведение случайной песни из массива (список) - PullRequest
0 голосов
/ 29 апреля 2018

Я хочу сыграть случайную песню на сайте. Мелодии короткие (максимум несколько секунд, они не требуют предварительной загрузки или буферизации).

Эта часть работает, количество песен может быть неограниченным, потому что tunes.length автоматически считает все песни.

document.write отображает URL-адрес произвольной песни на экране

tunes = new Array(
'"http://example.net/abcd.ogg"',
'"http://example.net/efgh.ogg"',
'"http://example.net/ijkl.ogg"'
)
var audiopath = (tunes[Math.floor(Math.random() * tunes.length)])
document.write (audiopath)

Эта часть также работает, когда URL-адрес определен как константа.

var song = new audio('http://example.net/abcd.ogg');
song.play();

Когда я пытаюсь заменить постоянный URL-адрес переменной audiopath, он не воспроизводится.
Может быть что-то не так с синтаксисом Я пытался запустить его с одинарными кавычками и без них в URL '"<a href="http://example.net/ijkl.ogg" rel="nofollow noreferrer">http://example.net/ijkl.ogg</a>"' или "<a href="http://example.net/ijkl.ogg" rel="nofollow noreferrer">http://example.net/ijkl.ogg</a>"

var song = new audio(audiopath);
song.play();

1 Ответ

0 голосов
/ 29 апреля 2018

Может быть лучше обработать начало воспроизведения после полной загрузки песни. Примерно так:

let loaded = false;
const song = new Audio();

song.addEventListener('loadeddata', function() 
{
    loaded = true;
    song.play();
}, false);

song.addEventListener('error' , function() 
{
    alert('error loading audio');
}, false);

song.src = tunes[Math.floor(Math.random() * tunes.length)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...