Javascript setTimeout适用于桌面,而不是Android?

时间:2016-04-28 23:02:08

标签: javascript android google-chrome settimeout

我有一个功能,当用户点击开始时,每隔n秒(基于来自网页的输入)随机播放不同的音频文件。正如您所料,当它们停止时会停止。

它在我的桌面上工作得很棒(使用chrome),但我已经在Chrome中的两个不同的Android设备(注释4和注释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找到。这是一个愚蠢的网络应用程序,我正在为我的姐姐做一个钢琴老师提醒她的学生弯曲他们的手指。

1 个答案:

答案 0 :(得分:3)

问题是由大多数移动浏览器引起的,这些浏览器阻止视频和声音在没有用户交互的情况下播放(加载它们可能会导致用户额外的费用,具体取决于他们的数据合同)。< / p>

因此,您无法在new Audio()之后使用setTimeout。但是,在至少一次用户交互之后,您可以做的是替换音频元素的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;