简体   繁体   English

无显示后砌体无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM