首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制客户端从特定文件夹预加载音频文件

强制客户端从特定文件夹预加载音频文件
EN

Stack Overflow用户
提问于 2018-02-16 10:36:37
回答 1查看 90关注 0票数 0

我开发了一个声板,你有很多按钮,如果你点击一个按钮,然后一个声音播放。是否有办法迫使客户端预加载特定文件夹中的所有音频文件,以便在页面加载后,即使internet连接中断,它们也可用?

我知道的唯一方法是为每个音频文件创建一个变量,在每个按钮中添加一个id,并为单击事件添加事件侦听器。

示例:

代码语言:javascript
复制
<button class="button" id="soundfile01">
    Test
</button>

...

var soundfile01 = new Audio("audio/soundfile01.mp3");    

$("#soundfile01").click(function() {
    soundfile01.play();
});

但每一个按钮都有很多工作要做。

我还可以给每个按钮一个带有音频文件名称的id,然后按如下方式对其进行编码:

代码语言:javascript
复制
$(".button").click(function() {
    var id = $(this).attr("id");
    var audio = new Audio("audio/"+id+".mp3");

    audio.play();
});

如果失去了网络连接,它就不再起作用了,但对于我来说,重要的是,如果页面已经被加载,互联网被断开了,这也是很重要的,因为我计划使用我的智能手机上的声卡,在家里预加载网页,然后让网站一整天开放,这样我就可以在任何地方使用它,即使我没有互联网连接。

我知道我可以制作一个应用程序,但只有为其开发的平台的所有者才能使用它,维护或更新多个应用程序将是一项艰巨的工作。

第一个例子中的代码是解决这个问题的唯一方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-16 10:48:53

这两种方法的混合将帮助你走出困境。首先,为每个按钮创建一个音频对象,然后使用按钮单击事件来播放每个对象.

代码语言:javascript
复制
// create an object that has an audio object for each button
var audio = {};
$(".button").each(function() {
    audio[this.id] = new Audio("audio/" + this.id + ".mp3");
});

// assign the click event handler
$(".button").click(function() {
    audio[this.id].play();
});

注意:我删除了$(this).attr("id"),因为您可以在jQuery处理程序中使用this.id

我还建议对附加到mp3文件的每个按钮使用一个数据属性,类似于.

代码语言:javascript
复制
<button id="sound01" class=".button" data-mp3-file="audio/some-filename.mp3">Sound 1</button>

那么创建音频对象的代码就会变成..。

代码语言:javascript
复制
audio[this.id] = new Audio($(this).data("mp3-file"));

这解决了始终必须使按钮ids与文件名匹配的问题,这在某个时候可能会成为一个问题。

您可以进一步处理每个音频对象的load事件,将每个按钮设置为初始禁用,并且只有在音频对象成功加载时才启用它们。这种方法只会使添加这样的东西变得更容易,因为您只有1段代码用于安装,1段代码用于按钮。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48824897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档