Предложите опцию отключения автозапуска звука

#javascript #html #checkbox #html5-audio #audio-streaming

#javascript #HTML #флажок #html5-аудио #потоковое аудио

Вопрос:

Я радиоведущий, и на моем веб-сайте настроен автозапуск моих трансляций в формате mp3 (я знаю, я знаю, просто ублажайте меня). Используя тег аудио HTML5, я хочу, чтобы звук автоматически воспроизводился при первом посещении моего сайта.

Однако я хочу, чтобы они могли установить флажок, в результате чего звук никогда не будет автоматически воспроизводиться для них снова, если они не снимут флажок.

Этот флажок должен появиться прямо под аудиопроигрывателем и изменить тег автозапуска с «true» на «false».

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

После некоторых быстрых исследований я собрал следующий код, но, поскольку я программист n00b, я не могу заставить его работать. Где я ошибаюсь и какое самое элегантное решение?

 function check(that){
	if(that.value === "disable-autoplay"){
        if((this).is(':checked')){
            autoplay="no"('checked');
		}
	}else {
		 autoplay="autoplay"('unchecked');
   	}
}  
 <audio controls autoplay="true"><source src="stream.mp3" type="audio/mp3"></audio>
<input type="checkbox" name="disable-autoplay" value="disable-autoplay" onchange="check(this)" />  

Комментарии:

1. Что подразумевается под «отключением автозапуска»? Пользователь не может сделать это до первого посещения вашей страницы. Сначала загружается страница, затем ваш проигрыватель начинает воспроизведение или ожидает действий пользователя в зависимости от параметра автоматической загрузки, после чего пользователь может нажать на ваш флажок

Ответ №1:

Из MDN

автозапуск: логический атрибут; если он указан (даже если значение равно «false»!), аудио автоматически начнет воспроизведение, как только сможет это сделать, не дожидаясь завершения загрузки всего аудиофайла

Во-первых, не назначайте автозапуск вообще в вашем HTML

  <audio id="myAudio" controls>
  <source src="song.ogg" type="audio/ogg">
  <source src="song.mp3" type="audio/mpeg">
</audio>
  

Создайте флажок с некоторым селектором, например id, также не назначайте обработчик событий в атрибуте

 <input type="checkbox" name="disableAutoplay" id="disableAutoplay" />
  

Теперь, я полагаю, вы хотите, чтобы предпочтение сохранялось на всем сайте, поэтому, даже если пользователь обновляет / перемещается по вашему сайту, его предпочтения должны оставаться, для этого используйте файлы cookie или хранилище браузера.
Я думаю, что использование локального хранилища было бы лучше из-за его простоты

 localStorage.setItem('disableAP','yes');            //saving
disableAutoplay = localStorage.getItem('disableAP');//retriing
  

посмотрите, насколько это просто.

Теперь при каждой загрузке страницы просто проверяйте пользовательскую префиксную переменную в хранилище и, соответственно, включайте / отключайте autoplay свойство звука и устанавливайте / снимайте флажок

теперь начинается самая важная часть: load() метод

Метод load() используется для обновления аудио / видео элемента после изменения источника или других настроек.

функция load () является сердцем этого кода, она обновляет ваш аудиоэлемент с помощью новой назначенной конфигурации.но без фактического обновления страницы или физического редактирования HTML, поэтому, по сути, это дает вам эффект динамической разметки.

посмотрите, как load() используется ниже в функции check ()

 var chkAutoPlay = document.getElementById('disableAutoplay');
var myAudio = document.getElementById('myAudio');

function check(that){
    if (that.checked)             //checkbox is checked
    {
        myAudio.autoplay=false;
        localStorage.setItem('disableAP','yes');

    } else {                      //checkbox is not checked                   
        myAudio.autoplay=true;
        localStorage.setItem('disableAP','no');
        myAudio.load();
    }
}
  

наконец, назначьте обработчик событий для флажка

 document.getElementById('disableAutoplay').onchange=check;
  

Демонстрация: https://jsfiddle.net/sanddune/oz0nhv2k /