在iPad和Android上执行声音的大延迟

在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

我想在用户单击图像时播放声音。我正在使用SoudManager插件

在这里,您可以检查我正在做什么:

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中预加载?类似于“如果加载了声音,就显示图像”之类的内容?