Я использую masonry.desandro для создания макета кирпичной кладки для своего веб-сайта. Макет работает нормально, но после изменения размера окна он не обновляет ширину (пока я не перезагружу сайт с помощью F5). Как я могу изменить размер контейнера моего макета кладки после изменения ориентации или изменения размера окна (без обновления с помощью F5)?
Инициализируем макет кладки:
initMasonry() {
this.masonry = new Masonry('.additive-post-container', {
itemSelector: '.item',
columnWidth: '.item',
fitWidth: true,
gutter: 20,
transitionDuration: 0,
});
}
Я добавил EventListener, чтобы реагировать на изменение размера окна. Но кладка не обновляется, когда я вызываю masonry.layout () внутри функции.
reloadMasonry(){
this.masonry.layout();
}
window.addEventListener('resize', this.reloadMasonry.bind(this));
Спасибо за вашу помощь !:)
Когда размер контейнера изменяется, я вычисляю ширину .item и вызываю функцию reloadMasonry (). Вызывается функция reloadMasonry (), но она ничего не меняет ... когда я изменяю размер окна и нажимаю F5, макет кирпичной кладки имеет правильную ширину. Не понимаю, почему меняет ширину только если я нажимаю F5 ..





Похоже, ваш EventListener не вызывает повторную отрисовку DOM. Принудительно повторять рендеринг нашего компонента каждый раз, когда окна браузера меняют размер. Благодаря этому вы вернете его в новом, скорректированном размере. Проверьте это, может быть, он вам пригодится
.layout()- правильный метод, и с вашим приемником событий все в порядке. Ваша проблема в другом месте, мы не сможем помочь, пока вы не покажете нам еще какой-нибудь код. Если вы хотите попробовать отладить самостоятельно, установите точки останова в своем файле. (добавлен ли слушатель? запускает ли он функцию макета? можете ли вы войти в функцию макета? консоль пишет какие-либо ошибки? и т. д.)