我正在学习使用Isotope,并且发现了作者关于如何animate item sizes的博客文章。
我已经为我正在开发的项目实施了这个。它由三个垂直列组成。每个项目是196px x 70px。单击某个项目时,它将扩展为402px x 230px。
所有项目都正确调整大小并导致Isotope刷新布局 - 第一项除外。
单击第一个项会导致所有后续列表项仅在一个垂直列中排成一行 - 即使有足够的空间且项目应该围绕第一个项目流动。
单击列表中的任何其他项会导致行为正确。只有第一个是不稳定的。任何人都可以看到可能导致这种情况的原因吗?
这是我的测试用例:http://joshrenaud.com/pd/testcase/testcase.html
处理此大小调整的代码如下所示:
$('.child').click(function(){
var $this = $(this);
if ($this.hasClass('big')) {
tileStyle = { width: 196, height: 70};
}
else {
tileStyle = { width: 402, height: 230};
}
$this.children().children('.childDate').toggle();
$this.children().children('.childDesc').toggle();
$this.toggleClass('big');
$this.find('.child-content').stop().animate( tileStyle );
$('#container').isotope( 'reLayout' )
});
答案 0 :(得分:11)
经过一些实验后我找到了答案。 Isotope有一个名为columnWidth的属性,文档认为该属性是可选的,因为脚本可以确定第一个项目的列宽。
然而,将columnWidth添加到我的.isotope()初始化程序中使得这个功能正常。
$('#container').isotope({
masonry: { columnWidth : 206 }
});
此外,似乎columnWidth 不与项目的宽度相同。这是项目的宽度,加上排水沟(边距)。在我的例子中,columnWidth是206:196(项目宽度)+ 10(装订线/边距)。