[英]Masonry doesn't work properly after display none
I'm currently using Masonry to make a list, here's my problem... 我目前正在使用砌筑工列出清单,这是我的问题...
I have some different type of div
content, and I want it to display only one type of them at once. 我有一些不同类型的
div
内容,并且我希望它一次只显示其中一种。
The way I do is apply display:none
on the div which are filtered out by javascript, and apply display:block
on the chosen div
. 我的方法是在javascript过滤掉的div上应用
display:none
,然后在所选div
上应用display:block
。
But weird is after I call Masonry, it makes all of the visible div
line up in one column, which is not what i expected... 但是奇怪的是我打电话给石工之后,它将所有可见的
div
排成一列,这不是我期望的...
here's my code: 这是我的代码:
$(function() { let m = $('#masonry'); let item = $('.item'); m.masonry({ itemSelector: '.item', columnWidth: 0 }); $('#false').on('click', function() { for(let i = 0; i < item.length; i ++) { $(item[i]).show(); } for(let i = 0; i < item.length; i ++) { if($(item[i]).data('hide') != false) { $(item[i]).hide(); } else { $(item[i]).show(); } } m.masonry(); }) $('#true').on('click', function() { for(let i = 0; i < item.length; i ++) { $(item[i]).show(); } for(let j = 0; j < item.length; j ++) { if($(item[j]).data('hide') != true) { $(item[j]).hide(); } else { $(item[j]).show(); } } m.masonry(); }) $('#pooo').on('click', function() { for(let i = 0; i < item.length; i ++) { $(item[i]).show(); } for(let j = 0; j < item.length; j ++) { if($(item[j]).data('hide') != null) { $(item[j]).hide(); } else { $(item[j]).show(); } } m.masonry(); }) })
.item { padding: 5px; width: 20%; } .inner { background: pink; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://masonry.desandro.com/masonry.pkgd.js"></script> <div id="masonry"> <div class="item"> <div class="inner"> <br><br><br><br><br><br> </div> </div> <div class="item" data-hide="null"> <div class="inner"><br><br><br><br><br></div> </div> <div class="item" data-hide="true"> <div class="inner"><br><br><br></div> </div> <div class="item" data-hide="false"> <div class="inner"><br><br><br><br><br></div> </div> <div class="item" data-hide="true"> <div class="inner"><br><br><br></div> </div> <div class="item" data-hide="null"> <div class="inner"><br><br><br><br><br></div> </div> <div class="item" data-hide="true"> <div class="inner"><br><br><br><br></div> </div> <div class="item" data-hide="false"> <div class="inner"><br><br><br><br></div> </div> <div class="item" data-hide="null"> <div class="inner"><br><br><br></div> </div> <div class="item" data-hide="false"> <div class="inner"><br><br><br><br><br><br><br><br></div> </div> </div> <button id="false">false</button> <button id="true">true</button> <button id="pooo">pooo</button>
Any suggests? 有什么建议吗?
OK, my assumption in comment is right, And Masonry already has a solution for it, which is columnWidth
. 好的,我的评论假设是正确的,而且Masonry已经有解决方案,那就是
columnWidth
。
By simply add a div
with the width I want as a reference for the columnWidth
's value eg $.masonry({columnWidth: '#theDivWithWidth'})
and it should do the trick... 通过简单地添加一个具有我想要的宽度的
div
作为columnWidth
的值的参考,例如$.masonry({columnWidth: '#theDivWithWidth'})
,它应该可以解决问题...
Case close I think XD 案例关闭,我认为XD
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.