javascript – HTML5音频对象无法在iPad上播放(从setTimeout调用时)

javascript – HTML5音频对象无法在iPad上播放(从setTimeout调用时),第1张

概述我有一个隐藏< audio>的页面通过 javascript使用自定义按钮启动和停止的对象. (原因是我想自定义按钮,而绘制音频播放器似乎会破坏iPad上的渲染性能).一个简化的例子(在coffeescript中): // Works fine on all browsersconstructor: (@_button, @_audio) -> @_button.on 'click', @ 我有一个隐藏< audio>的页面通过 javascript使用自定义按钮启动和停止的对象. (原因是我想自定义按钮,而绘制音频播放器似乎会破坏iPad上的渲染性能).一个简化的例子(在coffeescript中):

// Works fine on all browsersconstructor: (@_button,@_audio) ->  @_button.on 'click',@_play          // Bind button's click event with jquery_play: (e) =>  @_audio[0].play()                    // Call play() on audio element

当从绑定到click事件的函数触发时音频播放正常,但我实际上想要在播放文件之前完成动画,所以我将.play()放在setTimeout中.但是,我无法让这个工作:

// Will not play on iPadconstructor: (@_button,@_play          // Bind button's click event with jquery_play: (e) =>  setTimeout (=>                       // Declare a 300ms timeout    @_audio[0].play()                  // Call play() on audio element  ),300

我已经检查过@_audio(this._audio)是否在范围内,并且它的play()方法存在.为什么这不适用于iPad?

编辑:实际上,上面的简化测试用例确实有效.请参阅下面的@apsillers的回答以及我对它的评论.

解决方法 见 Apple’s iOS considerations guide:

…the JavaScript play() and load() methods are also inactive until the user initiates playback,unless the play() or load() method is triggered by user action. In other words,a user-initiated Play button works,but an onLoad="play()" event does not.

尽管setTimeout()本身位于用户启动的函数中,但似乎您的setTimeout()回调不符合用户启动的 *** 作.

建议:我没有要测试的iOS设备,但是当用户按下按钮时可能正在进行初始播放/暂停将减轻此限制.也就是说,你调用play()然后立即暂停它,然后使用play()调用调用animate和setTimeout()函数.这使得用户启动的功能让iOS知道将来加载和播放此视频是可以的.

总结

以上是内存溢出为你收集整理的javascript – HTML5音频对象无法在iPad上播放(从setTimeout调用时)全部内容,希望文章能够帮你解决javascript – HTML5音频对象无法在iPad上播放(从setTimeout调用时)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1082745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存