1

我正在为我正在尝试构建的站点实施 David DeSandro 的 JQuery Masonry 插件。我正在尝试对砌体功能运行回调,以便在它运行后滚动到页面中的相关部分,但由于某种原因,当我打开动画时无法使其工作。可以在http://desandro.com/demo/masonry/docs/#options查看文档。当我运行以下代码时,它可以正常工作,并且只有在砌体功能运行后才会发出警报:

$wall.masonry(
{
columnWidth: 216,
itemSelector: '.box:not(.invis)',
animate: false
},
function()
{
alert("Finished?");
}
);

但是,当我使用包含动画选项的以下代码运行以下代码时,警报会在动画完成之前运行:

$wall.masonry(
{
columnWidth: 216,
itemSelector: '.box:not(.invis)',
animate: true,
animationOptions: {
  duration: speed,
  queue: false
}
},
function()
{
alert("Finished?");
}
);

我真的很感激任何人都可以给我的关于如何防止警报发生的任何指示,直到动画完成,因为我被难住了!非常感谢你的帮助,

戴夫

4

1 回答 1

6

您可以做一些事情,但要在您的意义上发挥作用需要一个小技巧:

animationOptions要传递的对象可以采用一个complete属性,该属性定义了一个函数,该函数将在动画完成后触发。

问题是,每个块都是这种情况,因为每个块都是单独动画的。但是你可以像这样解决这个问题:

var boxCount = $wall.find('box').size(),
    counter = 0,
    onComplete = function() {
        if (counter < boxCount) counter++;
        else {
            alert("Finished?"); // <-- Here goes your actual callback!
            counter = 0;
        }
    }

$wall.masonry({
    columnWidth: 216,
    itemSelector: '.box:not(.invis)',
    animate: true,
    animationOptions: {
        duration: speed,
        queue: false,
        complete: onComplete
    }
});
于 2011-01-20T21:04:11.420 回答