У меня есть скрипт, который создает сетку, и элементы сетки «перемещаются» каждый раз, когда изменяется ширина области просмотра. У меня нет доступа к сценарию, и я его не писал. Я думаю, что это масонская сетка.
Я динамически меняю содержимое сетки, поэтому мне нужно как-то "обновить" (пересчитать) сетку, не обновляя страницу. На мобильных устройствах я сделал это, изменив метатег «начальный масштаб» (а затем сбросив его), чтобы принудительно обновить сетку. Однако тег области просмотра игнорируется на рабочем столе, поэтому я не знаю, как на самом деле заставить браузер думать, что размеры страницы изменены, и принудительно обновить сетку.
Любые идеи приветствуются, спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если сценарий каменной кладки хорош, у него может быть функция API, позволяющая делать то, что вам нужно, однако я думаю, что вы уже изучили это.
В качестве альтернативы...
Вариант № 1: изменить родительский контейнер
Посмотрите, можно ли принудительно обновить, просто временно изменив родительский контейнер. Например, увеличить ширину контейнера на 1 пиксель на мгновение и вернуться к исходной ширине.
Вариант № 2: найти существующий слушатель; найти функции
Существующий скрипт, вероятно, имеет прослушиватель + действия, когда размер окна просмотра изменяется (как вы описываете). Изучите сценарий, найдите этот слушатель и посмотрите, что он делает внутри. У него будут некоторые функции для расчета и рендеринга сетки, и вы захотите вызвать те же функции в своей собственной функции обновления данных.
Чтобы найти этого слушателя, найдите «изменить размер» и посмотрите, что получится.
Вот как может выглядеть слушатель изменения размера vanilla JS:
var screenWidth = document.documentElement.clientWidth;
resizeRefresh(screenWidth);
function resizeRefresh(width) {
window.addEventListener("resize", function(){
newWidth = document.documentElement.clientWidth;
if (newWidth != width) {
width = newWidth;
// do stuff
}
}, true);
}
Извинения! Обновил ответ.
В зависимости от того, как настроен скрипт, вы можете просто вызвать событие изменения размера, заставив его пересчитать на основе текущего размера. Если скрипт на самом деле отслеживает размер и проверяет изменения, вам нужно будет найти лучший способ заставить скрипт выполнить перерасчет сетки, что означает проверку скрипта. Это может быть так же просто, как изменить значение переменной, в которой скрипт хранит ранее записанную ширину области просмотра прямо перед тем, как вы инициируете событие изменения размера.
К вашему сведению: если скрипт загружается на вашей странице, значит, у вас есть доступ к скрипту.
window.addEventListener("resize", function(){
// Resize event listener from masonry script
console.info("Masonry grid resized for width "+window.innerWidth);
});
// If using jQuery
$(window).trigger("resize");
// Plain JS version
window.dispatchEvent(new Event('resize'));<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Я не думаю, что вы поняли мой вопрос. Я не хочу слушать, когда документ меняет ширину.. Я хочу «принудительно» изменить ширину самостоятельно, используя js.