Подтвердить что ты не робот

Изменить <audio> src с помощью javascript

У меня есть несколько аудиофайлов, которые я хочу передать на основе пользователя. Как мне это сделать? Это то, что у меня есть до сих пор, и это, похоже, не работает.

* UPDATE: Сделано несколько изменений, и теперь он утверждает, что audio.load(); не является функцией. Может ли кто-нибудь сказать мне, почему это так? Код обновляется, чтобы отражать изменения.

JavaScript:

function updateSource(){ 
    var audio = document.getElementById('oggSource');
    audio.src = 
        'audio/ogg/' + 
        document.getElementById('song1').getAttribute('data-value');
    audio.load();
}

HTML:

<audio id="audio" controls="controls">
    <source id="oggSource" src="" type="audio/ogg"></source>
    <source id="mp3Source" type="audio/mp3"></source>
        Your browser does not support the audio format.
</audio>

<ul style="list-style: none">
    <li>Sunday May 27, 2012
        <ul style="display: none">
            <li id="song1" data-value="song1.ogg">
                <button onclick="updateSource();">Item1</button>
            </li>
            <li>Item2</li>
            <li>Item3</li>
        </ul>
    </li>
</ul>

Item2 и Item3 Я хочу воспроизвести другой аудиофайл при нажатии.

4b9b3361

Ответ 1

Попробуйте этот фрагмент

list.onclick = function(e) {
  e.preventDefault();

  var elm = e.target;
  var audio = document.getElementById('audio');

  var source = document.getElementById('audioSource');
  source.src = elm.getAttribute('data-value');

  audio.load(); //call this to just preload the audio without playing
  audio.play(); //call this to play the song right away
};
<ul style="list-style: none">
  <li>Audio Files
    <ul id="list">
      <li><a href="#" data-value="http://media.w3.org/2010/07/bunny/04-Death_Becomes_Fur.oga">Death_Becomes_Fur.oga</a></li>
      <li><a href="#" data-value="http://media.w3.org/2010/07/bunny/04-Death_Becomes_Fur.mp4">Death_Becomes_Fur.mp4</a></li>
      <li><a href="#" data-value="http://media.w3.org/2010/11/rrs006.oga">rrs006.oga</a></li>
      <li><a href="#" data-value="http://media.w3.org/2010/05/sound/sound_90.mp3">sound_90.mp3</a></li>
    </ul>
  </li>
</ul>

<audio id="audio" controls="controls">
  <source id="audioSource" src=""></source>
  Your browser does not support the audio format.
</audio>

Ответ 2

Попробуйте следующее:

Заменить:

audio.load();

с:

audio.play();

Ответ 3

Вот как я это сделал, используя React и CJSX (Coffee JSX) на основе решения Vitim.us. Используя componentWillReceiveProps, я смог обнаружить все изменения свойств. Затем я просто проверяю, изменился ли URL между будущими реквизитами и текущим. И вуаля.

@propTypes =
    element: React.PropTypes.shape({
         version: React.PropTypes.number
         params:
             React.PropTypes.shape(
                 url: React.PropTypes.string.isRequired
                 filename: React.PropTypes.string.isRequired
                 title: React.PropTypes.string.isRequired
                 ext: React.PropTypes.string.isRequired
             ).isRequired
     }).isRequired

componentWillReceiveProps: (nextProps) ->
    element = ReactDOM.findDOMNode(this)
    audio = element.querySelector('audio')
    source = audio.querySelector('source')

    # When the url changes, we refresh the component manually so it reloads the loaded file
    if nextProps.element.params?.filename? and
    nextProps.element.params.url isnt @props.element.params.url
        source.src = nextProps.element.params.url
        audio.load()

Я должен был сделать это таким образом, потому что даже изменение состояния или перекраска силы не работало.

Ответ 4

Если вы сохраняете метаданные в теге, используйте атрибуты данных, например.

<li id="song1" data-value="song1.ogg"><button onclick="updateSource()">Item1</button></li>

Теперь используйте атрибут, чтобы получить имя песни

var audio = document.getElementById('audio');
audio.src='audio/ogg/' + document.getElementById('song1').getAttribute('data-value');
audio.load();

Ответ 5

с jQuery:

 $("#playerSource").attr("src", "new_src");

    var audio = $("#player");      

    audio[0].pause();
    audio[0].load();//suspends and restores all audio element

    if (isAutoplay) 
        audio[0].play();

Ответ 6

измените это значение

audio.src='audio/ogg/' + document.getElementById(song1.ogg);

to

audio.src='audio/ogg/' + document.getElementById('song1');

Ответ 7

var fileUrl = 'http://' + window.location.hostname +"abcd.ogg"; 
document.getElementById('audiotag').src = fileUrl;