在iPad和Android上执行声音的大延迟
我想在用户单击图像时播放声音。我正在使用SoudManager插件 在这里,您可以检查我正在做什么:在iPad和Android上执行声音的大延迟,android,jquery,ipad,delay,soundmanager2,Android,Jquery,Ipad,Delay,Soundmanager2,我想在用户单击图像时播放声音。我正在使用SoudManager插件 在这里,您可以检查我正在做什么: soundManager.setup({ url: 'swf', onready: function() { soundCarro = soundManager.createSound({ id: 'soundCarro', url: 'sound/carro_camona.m
soundManager.setup({
url: 'swf',
onready: function() {
soundCarro = soundManager.createSound({
id: 'soundCarro',
url: 'sound/carro_camona.mp3'
});
soundMoto = soundManager.createSound({
id: 'soundMoto',
url: 'sound/moto_camona.mp3'
});
soundNautico = soundManager.createSound({
id: 'soundNautico',
url: 'sound/nautico_camona.mp3'
});
}
});
如您所见,我创建了3个声音对象(soundCarro、soundMoto和soundNautico)
此处是操作,当用户单击它时,调用scrollTo函数:
<img id="ca" class="ca logo" onclick="scrollTo('secao-carros',true);" src="images/svg/CAhome.svg">
如您所见,在这个函数中,我执行创建的声音对象(例如:soundNautico.play();)
问题是,在iPad和Android设备上,这种声音的执行会有很大的延迟,但在桌面浏览器中,它工作得非常完美
如何防止这种延迟?这是因为桌面浏览器将预加载音频,因此当您调用
.play()
时,浏览器将立即开始播放,因为它已经缓冲了部分(如果不是全部)音频
我知道iOS和大多数其他移动浏览器将A)一次只允许播放一个音频文件,B)根本不允许缓存音频,C)如果用户在同一调用堆栈上物理启动操作,则只允许初始化/播放音频对象。如果你不想耽搁的话,你基本上是运气不好
编辑:您可以将事件侦听器添加到音频中,并仅在音频缓冲后触发滚动。但是,一次不能加载多个声音
audio.addEventListener("canplay", function(e) {
doScroll();
audio.play();
}, false);
```这是因为桌面浏览器将预加载音频,因此当您调用
.play()
时,浏览器将立即开始播放,因为它已经缓冲了部分(如果不是全部)音频
我知道iOS和大多数其他移动浏览器将A)一次只允许播放一个音频文件,B)根本不允许缓存音频,C)如果用户在同一调用堆栈上物理启动操作,则只允许初始化/播放音频对象。如果你不想耽搁的话,你基本上是运气不好
编辑:您可以将事件侦听器添加到音频中,并仅在音频缓冲后触发滚动。但是,一次不能加载多个声音
audio.addEventListener("canplay", function(e) {
doScroll();
audio.play();
}, false);
```谢谢您的回复!但是没有办法在iOS中预加载?类似于“如果加载了声音,请显示图像”?感谢您的回复!但是没有办法在iOS中预加载?类似于“如果加载了声音,就显示图像”之类的内容?