我开发的游戏是 html5、Jquery、Javascript,我需要在其中预加载几个音频。这些音频正在一一播放,但是当我将 iPad 最小化时,音频仍在付费。当浏览器最小化时,任何人都可以帮助暂停音频。当浏览器进入前台时,应该播放音频。
3 回答
为您提供完整的解决方案,我已经完成了一半。这是我到目前为止所拥有的:
var audio = document.getElementsByTagName('audio')[0];
window.onpageshow = function() {
audio.play();
}
window.onpagehide = function() {
audio.pause();
}
因此,只要您在关闭 Safari 时在应用程序选项卡上,它就会暂停音频。并在您开始备份时播放。当您更改标签时,它不会停止。
如果您的应用程序是apple-mobile-web-app-capable
,当您使用主屏幕按钮打开应用程序时将触发onpageshow
,并在您关闭它时暂停它。它不会完全暂停,因为打开它会迫使它从头开始。您必须使用 localStorage 或其他东西来捕捉您在轨道中的位置,然后currentTime
在您打开它时将其设置为该位置。
根据caniuse.com的说法,您似乎可以在 iOS 7 中使用Visibility API
只是为了历史的缘故,我至少要陈述一些我尝试过的其他事情。
- 窗口.onblur
将 requestAnimationFrame 与 setTimeout 一起使用(这适用于桌面,但不适用于 iOS)
var t; requestAnimationFrame(function checkWindow() { if ( audio.paused ) { audio.play(); } clearTimeout(t); t = setTimeout(function() { audio.pause(); }, 32); });
我建议您使用页面可见性 API,它会为您提供一个事件,告诉您页面的可见性何时发生变化。
function handleVisibilityChange() {
if (document.hidden){
stopAllSounds();
}else{
playAllSounds();
}
}
document.addEventListener("visibilitychange", handleVisibilityChange, false);
stopAllSounds
并将playAllSounds
根据您认为合适的方式定义,但是当 Safari 最小化和最大化时会触发此事件。它适用于 Android 设备和所有现代平台
希望我不会迟到回答它。我找到了以下适用于桌面和 ios 设备的解决方案(尚未签入 android)
$(window).on("blur focus", function(e) {
var prevType = $(this).data("prevType");
if (prevType != e.type) { // reduce double fire issues
switch (e.type) {
case "blur":
// do work
your_audio.pause();
break;
case "focus":
// do work
your_audio.play();
break;
}
}
$(this).data("prevType", e.type);
})
PS:your_audio 是一个变量,你必须定义它。