提供禁用音频自动播放的选项

Posted

技术标签:

【中文标题】提供禁用音频自动播放的选项【英文标题】:Offer option to disable audio autoplay 【发布时间】:2017-02-17 16:43:34 【问题描述】:

我是一名广播节目主持人,我的广播节目的 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)" />

【问题讨论】:

“禁用自动播放”是什么意思?用户在第一次访问您的页面之前无法执行此操作。首先加载页面,然后您的播放器开始播放或等待用户操作,具体取决于 autload 道具,之后用户可以单击您的复选框 【参考方案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它给你动态标记的效果。

看看下面的 check() 函数是如何使用 load() 的

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/

【讨论】:

以上是关于提供禁用音频自动播放的选项的主要内容,如果未能解决你的问题,请参考以下文章

chrome背景选项卡中的自动播放声音

小米手机safari怎么设置自动播放?

微信公众号文章音乐自动播放

谷歌浏览器中的自动播放问题

禁用YouTube嵌入代码中的自动播放功能

微信网页ios自动播放音频、视频