javascript - 在 iPad 上播放声音时出现延迟

标签 javascript ipad html

在我的小型 HTML5 网络应用程序中,我想播放声音以响应用户操作。当用户单击按钮时,在 onclick 处理程序中我会播放这样的声音:

    url = "assets/sounds/buzz" + (this.canPlayMP3 ? ".mp3" : ".ogg");
    sound = new Audio(url);
    sound.load();
    sound.play();

这在 Firefox 上效果很好。不幸的是,在 iPad(运行 iOS 5.1.1 的 iPad 2)上,我在播放声音之前有 2 秒的延迟。每次我播放声音样本时都会发生这种情况,而不仅仅是第一次。

MP3 文件长 9KB。 iPad 使用与运行 Firefox 的计算机完全相同的 Wifi 连接连接到网络。

我怎样才能弄清楚发生了什么?

最佳答案

您可能希望为每个声音创建音频元素的单个实例:

var Sounds = {
    cat: new Audio('/sounds/meow.ogg'),
    bird: new Audio('/sounds/tweet.ogg')
};

然后您可以一遍又一遍地播放相同的元素:

function playSound(name) {
    Sounds[name].currentTime = 0;
    Sounds[name].play();
}

playSound('cat');

如果 iOS 破坏了您的 Audio 对象,您可以在 cache manifest 中缓存声音文件:

CACHE MANIFEST
# 2012-08-09:v1.3

NETWORK:
*

CACHE:
/sounds/meow.ogg
/sounds/tweet.ogg

关于javascript - 在 iPad 上播放声音时出现延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719031/

相关文章:

javascript - 如何使用 Jenkins 在 CI 中的 Cypress 仪表板中填充作者、分支、提交、消息?

iphone - 从我自己的图像创建 "map"

iphone - 用于将应用程序与外部硬件配对的通配符应用程序 ID

iphone - 如何在 iOS 的菜单 Controller 中禁用粘贴选项?

html - 在 jboss 中为 HTML 加载图像

javascript - 动态下拉菜单创建问题(使用 AngularJS、CSS、JSON)

javascript - 如何在 KnockoutJS 中选择单个购物车项目的数量

javascript - e.preventDefault(); 有多危险,是否可以用 keydown/mousedown tracking 代替?

javascript - 我的数组旋转算法有什么问题?

javascript - 你能在 HTML 标签上同时使用 async 和 defer 属性吗?