我正在使用流行的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来滑动更多内容,因此需要砌体来重新调整布局。有关此解决方案的任何想法吗?
答案 0 :(得分:3)
slideToggle接收回调作为第二个参数,所以在那里更新你的插件,如下所示:
slideToggle(time, function(){
update(); // this is your "update" function from question example
});
是的,无缘无故地定期更新是个坏主意。
答案 1 :(得分:0)
根据我的经验,运行这样的东西会降低浏览器的速度。一开始你可能不会注意到它,但是脚本运行的时间越长,它就越糟糕。我非常喜欢@vucetica回答。
答案 2 :(得分:0)
这仅取决于插件需要“masonrify”的块数。如果你有20-50个块,那么每500ms运行一次更新就没问题了。这是我个人的经历,与你的情况完全一样。