0

我正在使用流行的 jquery 插件 Masonry 来很好地适应我的列在我的布局中。我正在使用 setInterval 来解决与 BoltHead 完全相同的问题: JQuery, setTimeout not working

解决方案是使用 setTimeout 每秒更新一次砌体插件,如下所示:

$(function() {
  setInterval(update, 500);
});

    function update() {
        var $container = $('#packages');
        $container.imagesLoaded(function(){
          $container.masonry({
            itemSelector : '.mainPackage',
            columnWidth : 316,
            singleMode: true,
            gutterWidth: 15
          });
        });
    }

就浏览器性能而言,这是一个坏主意吗?我认为 jquery 每秒运行这个相当庞大的函数会减慢速度。这是一个不好的做法吗?我这样做的原因是因为我正在使用 .slideToggle 向下滑动更多内容,因此需要砌体来重新调整布局。对此解决方案有任何想法吗?

4

3 回答 3

3

slideToggle 接收回调作为第二个参数,因此在此处更新您的插件,如下所示:

slideToggle(time, function(){
    update(); // this is your "update" function from question example
});

是的,无缘无故定期进行更新是个坏主意。

于 2012-02-05T04:43:56.197 回答
0

这仅取决于插件需要“masonrify”多少块。如果你有 20-50 个块,那么每 500 毫秒运行一次更新是没有问题的。这是我个人对与您的情况完全一样的案例的经验。

于 2012-12-29T01:38:42.950 回答
0

以我的经验,运行这样的东西会减慢浏览器的速度。一开始您可能不会注意到它,但是脚本运行的时间越长,它会变得越糟。我真的很喜欢@vucetica 的回答。

于 2012-02-05T04:47:47.600 回答