Top.Mail.Ru
Ответы
Аватар пользователя
5лет
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Подвисание анимации при загрузке контента.

Я верстаю одностраничный сайт, это не лендинг, просто умещаю весь контент разных страниц на одной с анимированными переходами и т. п. Делаю это с помощью фреймворка Vue. В принципе, раотает неплохо, но вот если переходить на страницу с непрогруженным контентом (картинки\видео и .т. п), то анимация может глючить. Можно ли это как-то исправить?

Я думаю сделать как-нибудь задержку прогрузки контента, но не знаю как это можно реализовать, буду очень признателен, если подскажете.

сам сайт - http://featherdesign.realnost.club/# (недоделанный)

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект
5лет

Реализовать очень просто: слушаешь событие 'load' буферного объекта (создаваемого в DOM без append'а), и в его обработчике меняешь стейт (моментально выводя уже кэшированный браузером контент).
Например, если представить компонент-обертку img с src в пропсах:
watch: {
 src(newSrc) {
  if (!this.ready) return;
  this.ready = false;
  this.bufImg.src = newSrc;
 }
},
created() {
 this.bufImg = document.createElement('img');  // or new Image()
 this.bufImg.addEventListener('load', () => {
  this.$refs.img.src = this.bufImg.src;
  this.ready = true;
 });
}
Вместо ready конечно лучше использовать отмену загрузки, если код меняет src не дождавшись ее. Это только общий набросок принципа предоада с единичным элементом, который нужно индивидуально развивать под каждую задачу (скажем, можно добавить заглушку-спиннер, или плавную смену картинок через фейд-анимацию). Вот при рендеринге img через v-for, код будет основан уже не на компоненте-обертке, а на объекте с массивом и связью с воркером, например - это уже посложнее.
Сама суть решения, это работа с кэшем браузера, и неважно как она будет организована.