2014-10-07 2 views
1

У меня есть небольшая функция jQuery для воспроизведения звука, когда пользователь нажимает на ссылку. Мне не нужны никакие элементы управления, это короткие образцы. Я просто хочу играть в любое время, когда пользователь нажимает. Вот html для раздела, который должен играть;Воспроизведение аудио с помощью JQuery

</div class="classicalRecordings"> 
     <a href="#" class="play" data-audio-src="music/classical/open.mp3">Open song</a> 
    </div> 

Тогда это jQuery для воспроизведения звука;

 function playMusic(){ 
      var audioElement = document.createElement('audio'); 
      var audioElementSrc = $(this).attr('data-audio-src'); 
      audioElement.setAttribute('src', audioElementSrc); 
      $.get(); 
      audioElement.addEventListener("load", function(){ 
       audioElement.play(); 
      }, true); 
     } 
     $(function(){ 
      $('.play').click(playMusic); 
     }); 

Это не работает. Я думаю, что это связано с переменной src, я не уверен, что правильно передаю ее в AudioElement. Я тестировал с помощью предупреждения, чтобы убедиться, что правильно захватил data-audio-src. Любая помощь приветствуется.

ответ

1

Я думаю, что событие, которое вы ищете, является загруженным событием.

function playMusic(){ 
     var audioElement = document.createElement('audio'); 
     var audioElementSrc = $(this).attr('data-audio-src'); 
     audioElement.setAttribute('src', audioElementSrc); 
     $.get(); 
     // changed "load" t0 "loadeddata" 
     audioElement.addEventListener("loadeddata", function(){ 
      audioElement.play(); 
     }, true); 
    } 
    $(function(){ 
     $('.play').click(playMusic); 
    }); 

Хотя вы, вероятно, может быть лучше иметь статический элемент аудио и изменив атрибут Src на клики, а не создавать новый звуковой элемент.

// example 
var audio = document.getElementsByTagName('audio')[0]; 
audio.addEventListener('loadeddata', function() { 
    this.play(); 
}, true); 
function playMusic() { 
    var audioElementSrc = $(this).attr('data-audio-src'); 
    audio.setAttribute('src', audioElementSrc); 
}; 
$('.play').click(playMusic); 

Существует основа для этого, которую стоит проверить. ListenJS. Я написал это :)

+0

Это работало идеально. Затем я добавил $ ('. Pause'). Click (function() { audioElement.pause(); }); функции playMusic, чтобы создать способ остановить воспроизведение. Это отлично подойдет для простого списка, который должен просто воспроизводить образцы – dimmlight

+0

Отлично! Рад, что это помогло! – Nindaff

0

попробовать что-то вроде этого:

<audio id="sound"> 
    <source src="music/classical/open.mp3" type="audio/mpeg"> 
</audio> 

И из кода:

$(function(){ 
     $('#sound').get(0).play(); 
    }); 
Смежные вопросы