在我的小型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连接连接到网络。
我怎样才能弄清楚发生了什么?
答案 0 :(得分:2)
如何在处理器外移动装载,例如使它全局/预加载?然后只在处理程序内调用play方法。
答案 1 :(得分:2)
您可能想为每个声音创建一个音频元素的实例:
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