thehighhomie
@thehighhomie

VueJS: при полной загрузке изображений vuе не видит размеры?

Пишу компоненты для работы с сеткой. Столкнулся с проблемой с получением размеров изображений при загрузке компонента.

В пример приведу компоненты, которые наглядно покажут проблему.

Есть компонент AppMasonry, который принимает слоты. Слоты в свою очередь - компоненты AppMasonrySlot (для реактивности).

Так как AppMasonry содержит в себе слоты компоненты, то каждый раз при изменении в свойстве $children, компонента AppMasonry, сработает хук updated, в котором я вызываю функцию перерисовки сетки.

Изображения я получаю по апи unsplash.com. Перед вставкой слотов я делаю предзагрузку изображений с помощью плагина imagesloaded.

Так вот, после введения Вас в курс дела, опишу проблему:
После того, как предзагрузятся изображения и в компонент AppMasonry вставятся слоты с компонентами AppMasonrySlot, при срабатывании хука updated, в компоненте AppMasonry, я вызываю функцию перерисовки и сетка перерисовывается.

Но, если почистить кэш браузера, именно "Изображения и другие файлы, сохраненные в кэше" и перезагрузить страинцу, то в фукнции перерисовки сетки, у каждого элемента размеры ширины и высоты равны нулю. То есть как я понял, хук updated в компоненте AppMasonry срабатывает быстрее чем картинки отрендерятся в браузере.

Такое еще может произойти, если быстро перезагружаться страницу, раз за разом.

Подскажите пожалуйста, как эту проблему можно решить?

Вот песочница с примером

Заранее прошу не предлагать ставить уже существующие плагины, я не собираюсь переписывать Masonry, у меня иные задачи по сеткам, более специфичные, а все названия компонентов в примере и сам пример описаны только в целях описания проблемы.
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
thehighhomie
@thehighhomie Автор вопроса
Решил проблему. Оказалось, что это из за плагина imagesLoaded. Написал сам предзагрузку и все теперь работает нормально!

PS: Не пользуйтесь плагином imagesLoaded, чтобы потом не страдать)

Песочница с правками
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы