如果存在类,则SetInterval播放声音

时间:2018-10-30 08:45:10

标签: javascript setinterval

我制作了此代码段,该代码段应在div中搜索是否存在类为“ card-new-order”的元素

id为“ comenzi”的div每5秒刷新一次,并更新其中的卡片及其类别。

如果找到具有类别的卡,则在脚本无法找到该元素之前播放声音。

这是我的代码,但是以某种方式无法正常工作。

var audio = document.getElementById("ring");
setInterval(function(){ 
    $('#comenzi').load(document.URL +  ' #comenzi'); 
    $('.contents > .card').each(function(i) {
        if($(this).hasClass('card-new-order')){
            audio.play();
        }else{
            audio.pause();
        }
    });

}, 5000);

1 个答案:

答案 0 :(得分:0)

load()方法完成之前,您似乎正在尝试播放/暂停音频元素。

请考虑修改代码,以便一旦load()操作的内容可用时,就会发生音频播放或暂停。您可以通过在load()方法上使用the success callback来做到这一点:

var audio = document.getElementById("ring");
function refresh(){ 

    // Pass a success callback function to load() which is run after
    // the load has succeeded. Also, remove the whitespace before #comenzi
    $('#comenzi').load(document.URL +  '#comenzi', function() {

    // The loaded content from document.URL#comenzi have loaded and
    // can now be accessed
    $('.contents > .card').each(function(i) {

        if($(this).hasClass('card-new-order')){
            audio.play();
        } else {
            audio.pause();
        }
    });

    // Start the next cycle after the contents have loaded
    setTimeout(refresh, 5000)
    });     
}

// Start the refresh cycle
refresh();

上面显示的另一个建议是使用setTimeout而不是setInterval以确保在从load()加载内容之后进行下一次刷新。基于setInterval的方法冒着立即执行对refresh()的调用的风险(如果服务器将内容返回到#comenzi的时间超过5秒才能响应,等等)

希望这会有所帮助!