Задать вопрос
@null_object

Как сделать горизонтальный виртуальный скролл?

Хочу сделать верстку как в книге, в две колонки на большом экране, и в одну колонку на мобильных устройствах.

<div class="reader__container">
    <section class="reader">
      <article>
          <!-- Тут содержимое -->
      </article>
    </section>
  </div>

<style>
.reader__container {
  height: 100%;
  padding: 2rem;
  overflow: hidden;
}

.reader {
  height: 100%;
  column-width: 600px;
  column-gap: 4em;
  column-count: 2;
  column-fill: auto;
}
</style>


Это отлично рендерится и переносится:
66310a3e75700563065600.jpeg
66310b3a3f278071999450.jpeg

Далее я хотел это использовать с transform: translateX(-...), чтобы перелистывать страницы, но тут столкнулся с проблемой, которую не знаю как решить: из-за большого количества нод, слой с контентом получается очень тяжелый ~120мб, и скролл начинает тормозить
66310e2127458963174718.png

Пытался ограничить количество нод, рендерил очередной элемент и проверял, вылазит ли он за контейнер, но в этом случае я не могу посчитать количество страниц книги, потому что не знаю заранее размеры отрендеренных элементов. Может у кого-то есть идеи как это можно сделать?
  • Вопрос задан
  • 170 просмотров
Подписаться 1 Сложный 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
dedalik
@dedalik
Веб разработчик
Привет, тут нужен виртуальный горизонтальный скролл, который будет подгружать страницы, когда они становятся видимы в браузере. Не знаю на чём ты делаешь проект, если например на реакте, то библиотек очень много и сделать проще. Тут, на всякий случай хорошая библиотека для реакт https://tanstack.com/virtual/latest/docs/introduction

Я предполагаю, что ты делаешь на чистом javascript и сделал тебе пример как это работает https://codesandbox.io/p/sandbox/virtual-scroll-ho... Твоя задача, это вставить свой контент в javascript.

Для примера я использую готовый пример виртуального скрола, который можно найти на github https://github.com/tbranyen/hyperlist
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽