Проблемы с остановкой звука html5 и возобновлением воспроизведения - PullRequest
2 голосов
/ 30 марта 2011

если я прекращаю воспроизведение аудио с помощью метода .pause (), затем устанавливаю .currentTime = 0 и, наконец, снова вызываю метод .play (), я слышу царапину ... Иногда кажется, что воспроизведение начинается в позиции 1сек, но должно начатьсяв 0!Мой код:

HTML:

<audio id="sound" preload="auto" autobuffer>
    <source src="a.mp3" />
</audio>

JS:

var sound = $('#sound')[0];

function playSound(){
    sound.pause();
    sound.currentTime = 0;
    sound.play();
}

Если я вызываю функцию eventdriven, иногда возникает описанная выше ошибка.

Есть идеи?Thx.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Код выглядит хорошо. Вы пробовали в разных браузерах? HTML5 еще не окончательный, и производители браузеров работают над реализацией. Может быть, ошибка?

0 голосов
/ 30 мая 2013

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

Что я здесь делаю, так это запускаю таймер, когда пользователь нажимает на аудиоэлемент, и он начинает воспроизведение. Затем каждую 1 секунду я проверяю время, чтобы узнать, прошло ли 45 секунд. Если это так, это пробная версия звука, который я демонстрирую, и сбросит currentTime на 0, а затем приостановит воспроизведение видео, чтобы оно не повторялось. Затем я очищаю интервал.

Разница между тем, что вы делаете, и тем, что я делаю, заключается в том маленьком «е» в параметрах функции. Если вы поместите console.log(e); где-нибудь в своем скрипте, а затем откроете Firebug или любую другую веб-консоль, вы можете щелкнуть это возвращаемое значение и увидеть всю информацию, к которой вы можете получить доступ из объекта события. Оттуда вы можете сделать так, чтобы аудиоплеер приготовил вам чашку кофе ... Хорошо, может быть, и не так, но вы можете заставить его поклониться вашей воле.

$('audio').click(function(e) {
    window.setInterval(function(){ 
      if(e.currentTarget['currentTime'] > 45){ 
         $(e.currentTarget['currentTime'] = 0); 
         $(e.currentTarget.pause()); 
         clearInterval(); 
       } 
     }, 1000); 
});

=============================================== =========================

...