У меня есть следующая страница:
$(function () {
var container = document.querySelector('#PanelContainer');
var msnry = new Masonry(container, {
itemSelector: '.selector-class',
isAnimated: true,
animationOptions: {
duration: 750,
easing: 'linear',
queue: false
}
});
$(".spoiler-trigger").click(function () {
$(this).parent().next().collapse('toggle');
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
<div class="container">
<div id="PanelContainer" class="row">
<div class="col-md-6 selector-class">
<div class="panel panel-primary card-0">
<div class="panel-heading">
<h3 class="panel-title">Title</h3>
</div>
<div class="panel-body">
<div class="panel panel-default">
<div class="panel-heading">
<button type="button" class="btn btn-default btn-xs spoiler-trigger" data-toggle="collapse">Collapse</button>
</div>
<div class="panel-collapse collapse out">
<div class="panel-body">Body</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6 selector-class">
<div class="panel panel-primary card-0">
<div class="panel-heading">
<h3 class="panel-title">Title</h3>
</div>
<div class="panel-body">
<div class="panel panel-default">
<div class="panel-heading">
<button type="button" class="btn btn-default btn-xs spoiler-trigger" data-toggle="collapse">Collapse</button>
</div>
<div class="panel-collapse collapse out">
<div class="panel-body">Body</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6 selector-class">
<div class="panel panel-primary card-0">
<div class="panel-heading">
<h3 class="panel-title">Title</h3>
</div>
<div class="panel-body">
<div class="panel panel-default">
<div class="panel-heading">
<button type="button" class="btn btn-default btn-xs spoiler-trigger" data-toggle="collapse">Collapse</button>
</div>
<div class="panel-collapse collapse out">
<div class="panel-body">Body</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6 selector-class">
<div class="panel panel-primary card-0">
<div class="panel-heading">
<h3 class="panel-title">Title</h3>
</div>
<div class="panel-body">
<div class="panel panel-default">
<div class="panel-heading">
<button type="button" class="btn btn-default btn-xs spoiler-trigger" data-toggle="collapse">Collapse</button>
</div>
<div class="panel-collapse collapse out">
<div class="panel-body">Body</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Все выглядит идеально, но когда пользователь пытается развернуть любую панель, она перекрывает другие. Как заставить Masonry пересчитывать и плавно обновлять расположение панелей?
P.S. Я новичок в JS.
ДОБАВЛЕНО
Я установил прослушиватели для событий Bootstrap:
$(document).on('hidden.bs.collapse', function () {
msnry.layout();
});
$(document).on('shown.bs.collapse', function () {
msnry.layout();
});
И мой макет начал обновлять себя, но если он имеет неправильное поведение для расширения. Теперь панель расширилась и после этого вызывает обновление макета, но мне нужно сделать это раньше.