![](/img/trans.png)
[英]iOS Safari Javascript not working but works on Desktop and Android
[英]Javascript setTimeout works on desktop, not on android?
我有一个函数,当用户点击开始时,每n秒(基于来自网页的输入)随机播放一个不同的音频文件。 就像您期望的那样,当他们按下Stop时,它就会停止。
它在我的桌面(使用chrome)上效果很好,但是我已经在chrome的两个不同的android设备(note 4和note 8)上尝试过了,但是在打包之前只能播放一次音频。
工作流程:用户单击开始,将调用功能startstop。 如果是“开始”按钮,则播放音频并创建n秒的超时(加上2以允许每个音频文件播放)
如果是停止按钮,请清除超时,暂停所有音频,然后将按钮重置为开始。
var audiofiles = ['audio/Are your fingers curved.mp3','audio/Curve fingers.mp3','audio/Curve them up.mp3','audio/Curve them.mp3','audio/Curve your fingers.mp3','audio/Curve.mp3']
var playSounds;
var audio;
function startstop()
{
var text = document.getElementById("StartStop").firstChild;
if (text.innerHTML == 'Start')
{
if (!validateInputValue())
{
return;
}
playAudio();
text.innerHTML = 'Stop';
}
else
{
clearTimeout(playSounds);
audio.pause();
text.innerHTML = 'Start';
}
}
function playAudio()
{
var delta = document.getElementById("timeDelta").value;
delta = parseInt(delta, 10) + 2; // add two since they're all about two seconds. Easier than blocking when you play a file.
var fileToPlay = audiofiles[Math.round(Math.random() * (audiofiles.length - 1))];
audio = new Audio(fileToPlay);
audio.play();
playSounds = setTimeout(playAudio, delta*1000);
}
function validateInputValue()
{
document.getElementById("warning").innerHTML = " ";
//Get the value to evaluate
delta = parseInt(document.getElementById("timeDelta").value, 10);
if (delta < 0 || delta > 300)
{
document.getElementById("warning").innerHTML = "Please enter a number from 0 to 300";
document.getElementById("timeDelta").value = 30;
return false;
}
return true;
}
我觉得自己在服用疯药。 该网站是实时的,可以在susannavalleau.com/fingers上找到。 这是我为姐姐(姐姐是钢琴老师)制作的一个愚蠢的网络应用,目的是提醒她的学生弯曲手指。
此问题是由大多数移动浏览器引起的,这些浏览器会在没有用户交互的情况下阻止播放视频和声音(加载它们可能会导致用户产生额外的费用,具体取决于他们的数据合同) 。
因此,在setTimeout
之后不能使用new Audio()
。 但是,在至少一次用户交互之后,您可以做的是替换音频元素的src
并使其播放。 好消息是:您确实已经需要至少一个用户交互。
1.第一步,在HTML中添加<audio>
元素:
<audio id="sound"></audio>
2.页面加载完HTML后,通过在代码末尾添加该元素,将其保存在audio
变量中:
window.addEventListener('DOMContentLoaded', function(){
audio = document.getElementById('sound');
});
3.在您的playAudio
函数中,不要使用audio = new Audio()
做到这一点:
audio.src = fileToPlay;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.