2012-02-05 91 views
0

我使用流行的jQuery插件砌体,以适合我的列在我的布局很好。我使用的是setInterval来逐步地解决相同问题的BoltHead曾在这里:JQuery, setTimeout not workingsetInterval能否大幅降低浏览器性能?

的解决方案是使用的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来滑动更多的内容,因此需要砖石来重新调整布局。对此解决方案有什么想法?

+0

为什么只有在添加新内容时才更新? – 2012-02-05 04:41:47

+0

和in一样,当slideToggle被触发时更新? – JCHASE11 2012-02-05 04:42:40

+0

是的,试图更新每一秒,而没有任何改变布局将只是没有使用CPU。 – 2012-02-05 04:44:29

回答

3

的slideToggle接收回调作为第二个参数,所以更新你的插件,这样的事情:

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

是的,这是一个坏主意,定期对更新没有理由。

+0

是的,slidetoggle上的回调是一个更好的解决方案,谢谢! – JCHASE11 2012-02-05 04:46:21

0

根据我的经验,像这样运行会降低浏览器速度。起初你可能没有注意到,但脚本运行得越久,它就会越糟糕。我真的很喜欢@vucetica的答案。

0

这只取决于插件需要“masonrify”的块数。如果您拥有20-50个块,则每500毫秒运行一次更新就没有问题。这是我个人的经历,与您的案例完全一样。