Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态创建的动画完成时回调_Javascript_Jquery_Animation_Queue - Fatal编程技术网

Javascript 动态创建的动画完成时回调

Javascript 动态创建的动画完成时回调,javascript,jquery,animation,queue,Javascript,Jquery,Animation,Queue,我有以下代码,其中我添加了队列中两个循环的效果: tablaActual = ({ 1111: { titulo: "Nuevo Video 1", usuario: "RadioBot", alta: "1353182478" }, 2243: { titulo: "Old Boy Fashion", usuario: "RadioBot", alta: "135318247

我有以下代码,其中我添加了队列中两个循环的效果:

tablaActual = ({
    1111: {
        titulo: "Nuevo Video 1",
        usuario: "RadioBot",
        alta: "1353182478"
    },
    2243: {
        titulo: "Old Boy Fashion",
        usuario: "RadioBot",
        alta: "1353182479"
    },
    3432: {
        titulo: "Britney spears",
        usuario: "RadioBot",
        alta: "1353182825"
    }
});

tablaNueva = ({
    1111: {
        titulo: "Nuevo Video 1",
        usuario: "RadioBot",
        alta: "1353182478"
    },
    1112: {
        titulo: "Nuevo video 2",
        usuario: "RadioBot",
        alta: "1353182477"
    },
    1113: {
        titulo: "Nuevo video 3",
        usuario: "RadioBot",
        alta: "1353182476"
    }
});


$("button").bind("click", function() {

    var body = $('body');

    retardation = 500;
    i = 1;

    // we delete the old ones that doesnt match in the new table
    $.each(tablaActual, function(index) {
        if (!tablaNueva[index]) {
            delay = i * retardation;

            $('#lista #id' + index).delay(delay).slideUp("normal", function() {
                $(this).remove();
            }).queue("cola1");

            delete tablaActual[index];
            i++;
        }
    });

    // we add the new ones that doesnt match in the old table
    $.each(tablaNueva, function(index, vars) {
        if (!tablaActual[index]) {

            delay = i * retardation;
            $('<tr id="id' + index + '"><td class="cancion"><h3>' + vars.titulo + '</h3></td><td class="autor">' + vars.usuario + '<span>' + vars.alta + '</span></td></tr>').appendTo('#lista').hide().delay(delay).show('slow').queue("cola2");


            tablaActual[index] = vars;
            i++;


        }
    });

    $("tr:animated").promise().done(function() {

        alert("done");
    });


});
tablaActual=({
1111: {
titulo:“新潮视频1”,
乌萨里奥:“无线电机器人”,
alta:“1353182478”
},
2243: {
泰特罗:“老男孩时尚”,
乌萨里奥:“无线电机器人”,
alta:“1353182479”
},
3432: {
提特罗:“小甜甜布兰妮”,
乌萨里奥:“无线电机器人”,
alta:“135318285”
}
});
塔巴努埃娃=({
1111: {
titulo:“新潮视频1”,
乌萨里奥:“无线电机器人”,
alta:“1353182478”
},
1112: {
titulo:“新潮视频2”,
乌萨里奥:“无线电机器人”,
alta:“1353182477”
},
1113: {
titulo:“新潮视频3”,
乌萨里奥:“无线电机器人”,
alta:“1353182476”
}
});
$(“按钮”).bind(“单击”,函数(){
变量body=$('body');
延迟=500;
i=1;
//我们删除新表中不匹配的旧表
$.each(表实际值、函数(索引){
如果(!tablaNueva[索引]){
延迟=i*延迟;
$('#lista#id'+索引).delay(delay).slideUp(“正常”,函数(){
$(this.remove();
}).队列(“cola1”);
删除表格实际[索引];
i++;
}
});
//我们在旧表中添加不匹配的新表
美元。每个(表格、函数(索引、变量){
如果(!tablaActual[索引]){
延迟=i*延迟;
$(''+vars.titulo+''+vars.usuario+''+vars.alta+'').appendTo('#lista').hide().delay(delay).show('slow').queue(“cola2”);
表A实际[指数]=变量;
i++;
}
});
$(($tr:animated”).promise().done(函数(){
警惕(“完成”);
});
});

当所有TR动画完成时,它应该会触发警报,但我认为我做得不对,因为只要我单击run按钮,警报就会弹出

我如何做到这一点?

我会使用jQuery.Deferred()使其工作。通过执行此操作,可以将许多延迟对象排队,这些对象在相应的项目动画完成后解析

简而言之,创建一个延迟对象数组,并使用有点奇怪的构造
jQuery.when.apply(…).done(function(){…})
等待它们

查看。

您可以在
show
函数的回调中移动警报(完成回调),并测试是否已完成所有动画:

var totalmacth=0;
var循环=0;
//这是一个很好的例子
美元。每个(表格、函数(索引、变量){
如果(!tablaActual[索引]){
totalmacth++;
延迟=i*延迟;
$(''+vars.titulo+''+vars.usuario+''+vars.alta+'').appendTo('#lista').hide().delay(delay)
.show('slow',function()){
loop++;
console.log(循环+“”+totalmacth)
如果(循环===totalmacth)
警惕(“完成”);
});
表A实际[指数]=变量;
i++;
}      
});

我认为mzedeler方法更好,你同意吗?我同意。我的答案是解决问题的简单方法,@mzedeler的答案是最简洁的。
var totalmacth=0;
var loop=0;
// los que se tienen que añadir
$.each(tablaNueva, function(index, vars) {
    if (!tablaActual[index]) {
    totalmacth++;

    delay = i * retardation;
    $('<tr id="id' + index + '"><td class="cancion"><h3>' + vars.titulo + '</h3></td><td class="autor">' + vars.usuario + '<span>' + vars.alta + '</span></td></tr>').appendTo('#lista').hide().delay(delay)
         .show('slow',function(){
              loop++; 
              console.log(loop + ' ' + totalmacth)                
              if(loop === totalmacth)
                  alert("done");

          });
    tablaActual[index] = vars;
    i++;
    }      
});