更改setInterval的延迟

时间:2014-09-11 16:41:48

标签: javascript jquery

我有一个高音扬声器。 Feed会显示一个带有动画的小div,首先会检查div display属性是否为:none,如果是,则切换可见性并从a json写入一些信息文件。但是,如果它display: block隐藏'div'。

现在我想使用函数内部的'if''else'来改变'setInterval'的'delay'值。但我无法改变它?

$(document).ready(function() {
    $.ajaxSetup({ cache: false });
    var delay = 2000;
    setInterval(function() {
        var isVisible = $('#container').css("display") == "none";
        if(isVisible) {
            delay = 10000;

            $("#container").toggle( "clip", "slow" );
            $.getJSON('data.json', function (data) {
                document.getElementById("user").innerHTML = "<h1>@" 
                + data.user.screen_name + "</h1>";
            });
        }
        else {
            delay = 1000;
            $("#container").toggle( "clip", "slow" );
        }
    }, delay );
});

谢谢!

2 个答案:

答案 0 :(得分:0)

要更改您需要清除现有间隔并创建新间隔的间隔。

var interval = setInterval(callback, delay);
clearInterval(interval);
interval = setInterval(callback, newDelay);

将时间间隔和超时分配给var始终是个好主意。然后,您可以通过clearTimeoutclearInterval.

清除句柄

答案 1 :(得分:0)

对于您的情况,您可以尝试使用setTimeout:

$(document).ready(function() {
    $.ajaxSetup({ cache: false });
    var delay = 2000,
        toggleDiv;

    toggleDiv = function() {
        var isVisible = $('#container').css("display") == "none";
        if(isVisible) {
            setTimeout(toggleDiv, 10000);

            $("#container").toggle( "clip", "slow" );
            $.getJSON('data.json', function (data) {
                document.getElementById("user").innerHTML = "<h1>@" 
                + data.user.screen_name + "</h1>";
            });
        }
        else {
            setTimeout(toggleDiv, 1000);
            $("#container").toggle( "clip", "slow" );
        }
    };

    setTimeout(toggleDiv, delay);
});