В приложении, которое я пишу, я пытаюсь создать систему двумерных сеток, которую можно бесконечно расширять в любом направлении.Для тех из вас, кто знаком с LabVIEW, я пытаюсь эмулировать возможность, которую пользователи должны бесконечно прокручивать на лицевой панели и блок-диаграмму ВП.
Используя flexbox, мне удалось заставить его работать нормальнов направлениях вверх, вниз и влево, но прокрутка вправо проблематична:
Сетка работает путем вложения изменяемого размера «контейнера» div
в видовой экран фиксированного размера"div
:
<template>
<div class="expandable-grid-viewport" ...>
<div class="expandable-grid-container" ...>
<div v-for="tile in tiles" ...>
<GridSquare .../>
</div>
</div>
</div>
</template>
Это жестко закодированные аспекты стилей этих элементов:
.expandable-grid-viewport {
display: flex;
min-height: 100%;
min-width: 100%;
overflow: scroll;
}
.expandable-grid-container {
position: relative;
display: flex;
overflow: hidden;
}
Я делаю сетку, отслеживающую положение x / y, соответствующее тому, где находится пользовательпрокрутите и измените стиль окна просмотра на его основе:
get viewportStyle() {
const [viewportWidth, viewportHeight] = this.viewportDimensions;
return {
"flex-direction": this.yIndex < 0 ? "column" : "column-reverse",
"align-items": this.xIndex < 0 ? "flex-start" : "flex-end",
width: `${viewportWidth}px`,
height: `${viewportHeight}px`
};
}
По сути, я отражаю направление, в котором расширяется контейнер, когда я пересекаю с положительной стороны оси на отрицательную (или наоборот)так что область просмотра всегда заполняется как минимум одним углом контейнера, и контейнер расширяется оттуда наружу:
ПроблемаЯ сталкиваюсь с тем, что flexbox позволяет мне переворачивать только строки или столбцов, но не оба вместе.Как показано в приведенном выше коде, я переключаюсь между column
и column-reverse
, что позволяет правильно обрабатывать прокрутку по вертикальной оси, но это приводит к проблеме с горизонтальной прокруткой, как показано в GIF.Я могу изменить это на row
и row-reverse
, в этом случае прокрутка в горизонтальном направлении работает нормально, но не в вертикальном направлении.
Есть ли способ, которым я могу сделать оба вместе?Помимо флексбокса, я также пытался поиграться с сеткой CSS, но успеха у меня не было.