Принудительное обновление сетки каменной кладки

У меня есть скрипт, который создает сетку, и элементы сетки «перемещаются» каждый раз, когда изменяется ширина области просмотра. У меня нет доступа к сценарию, и я его не писал. Я думаю, что это масонская сетка.

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

Любые идеи приветствуются, спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 079
2

Ответы 2

Если сценарий каменной кладки хорош, у него может быть функция 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);
}

Я не думаю, что вы поняли мой вопрос. Я не хочу слушать, когда документ меняет ширину.. Я хочу «принудительно» изменить ширину самостоятельно, используя js.

tr4nc3 29.03.2019 10:10

Извинения! Обновил ответ.

MarsAndBack 12.04.2019 06:17

В зависимости от того, как настроен скрипт, вы можете просто вызвать событие изменения размера, заставив его пересчитать на основе текущего размера. Если скрипт на самом деле отслеживает размер и проверяет изменения, вам нужно будет найти лучший способ заставить скрипт выполнить перерасчет сетки, что означает проверку скрипта. Это может быть так же просто, как изменить значение переменной, в которой скрипт хранит ранее записанную ширину области просмотра прямо перед тем, как вы инициируете событие изменения размера.

К вашему сведению: если скрипт загружается на вашей странице, значит, у вас есть доступ к скрипту.

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>

Другие вопросы по теме