如何在循环和setInterval中执行fadein()和fadeout()ONLY ONCE?

时间:2016-09-20 01:26:58

标签: javascript jquery

我正在建立一个列表系统,每隔3秒更新一次,从JSON文件中检查新数据。我也在添加效果fadeIn()和fadeOut()但是 每次循环时都会执行fadeIn()和fadeOut()(setInterval(list,3000);)。 我希望在数据已经附加后执行。抱歉我的英语不好。

注意: IT KEEPS ON BLINKING。在3秒内

list();
setInterval(list, 3000);

function list() {
    $.getJSON('list.php',function(response){
        var timeout = 400;
        $("#list").fadeOut(timeout);
        $('#list').fadeIn(timeout);
        $('#list').empty();

        for(var i = 0; i < response.list_count; i++){
            var newElement = document.createElement('div');
            newElement.innerHTML = response.list[i].firstname;
            document.getElementById("list").appendChild(newElement);
        }
        document.getElementById("list_count").innerHTML = "" +  response.list_count; + ""; 
    });
};

1 个答案:

答案 0 :(得分:1)

尝试添加变量并在显示元素时指定true(仅用于检查器是否已显示元素)

var displayed = false;

list();
setInterval(list, 3000);

function list() {
    $.getJSON('list.php',function(response){
        var timeout = 400;
        if (displayed == false) {
            $("#list").fadeOut(timeout);
            $('#list').fadeIn(timeout);
            displayed = true;
        }
        $('#list').empty();

        for(var i = 0; i < response.list_count; i++){
            var newElement = document.createElement('div');
            newElement.innerHTML = response.list[i].firstname;
            document.getElementById("list").appendChild(newElement);
        }
        document.getElementById("list_count").innerHTML = "" +  response.list_count; + ""; 
    });
};