Как создать анимированный эффект сетки, который будет адаптивным?

Вопрос или проблема

Я работаю над личным проектом, где хочу сделать анимированную сетку, как на этом сайте (https://109ichiki.com/). Буду благодарен за любую помощь. Это мой первый пост здесь, так что прошу прощения, если не следую каким-либо правилам.

Я подумываю о создании нескольких линий внутри двух элементов div: одного для горизонтальных линий и одного для вертикальных. Но я не могу понять, как сделать это адаптивным, как на указанном мною сайте. Анимировать линии будет легко. Единственная проблема, с которой я сталкиваюсь, – это то, как сделать это адаптивным; метод, который я рассматриваю, более жестко закодирован и отнюдь не адаптивен.

Ответ или решение

Чтобы создать анимированный эффект сетки, который будет отзывчивым, как на сайте, который вы упомянули, вам понадобится использовать CSS и JavaScript. Вот пошаговое руководство по созданию такого эффекта:

1. Структура HTML

Начните с создания базовой структуры HTML. Используйте два контейнера для горизонтальных и вертикальных линий:

<div class="grid-container">
    <div class="horizontal-lines"></div>
    <div class="vertical-lines"></div>
</div>

2. Стили CSS

Далее, добавьте стили CSS для настройки внешнего вида сетки и анимации. Используйте Flexbox для отзывчивости:

body, html {
    margin: 0;
    height: 100%;
    overflow: hidden; /* Скрыть полосу прокрутки */
}

.grid-container {
    position: relative;
    width: 100vw;
    height: 100vh;
    overflow: hidden;
}

.horizontal-lines, .vertical-lines {
    position: absolute;
    background: transparent;
    pointer-events: none; /* отключить взаимодействие с линиями */
}

.horizontal-lines {
    width: 100%;
    top: 0;
}

.vertical-lines {
    height: 100%;
    left: 0;
}

/* Анимация линий */
@keyframes draw {
    0% {
        transform: scaleX(0);
    }
    100% {
        transform: scaleX(1);
    }
}

/* Основной стиль линей */
.line {
    position: absolute;
    background: rgba(255, 255, 255, 0.2);
}

.line.horizontal {
    height: 1px; /* Толщина горизонтальной линии */
    animation: draw 2s infinite alternate; /* Анимация */
}

.line.vertical {
    width: 1px; /* Толщина вертикальной линии */
    animation: draw 2s infinite alternate; /* Анимация */
}

3. JavaScript для генерации линий

Теперь необходимо добавить JavaScript для динамического создания линий в зависимости от размера окна:

const container = document.querySelector('.grid-container');
const horizontalLines = document.querySelector('.horizontal-lines');
const verticalLines = document.querySelector('.vertical-lines');

function createGridLines() {
    const rows = Math.floor(window.innerHeight / 50); // количество горизонтальных линий
    const cols = Math.floor(window.innerWidth / 50); // количество вертикальных линий

    horizontalLines.innerHTML = '';
    verticalLines.innerHTML = '';

    for (let i = 0; i <= rows; i++) {
        const line = document.createElement('div');
        line.classList.add('line', 'horizontal');
        line.style.top = `${i * 50}px`; // расстояние между линиями - 50px
        horizontalLines.appendChild(line);
    }

    for (let j = 0; j <= cols; j++) {
        const line = document.createElement('div');
        line.classList.add('line', 'vertical');
        line.style.left = `${j * 50}px`; // расстояние между линиями - 50px
        verticalLines.appendChild(line);
    }
}

// Вызов функции при загрузке и изменении размера окна
createGridLines();
window.addEventListener('resize', createGridLines);

4. Объяснение кода

  • HTML: Создаем два контейнера для горизонтальных и вертикальных линий.
  • CSS: Настраиваем стили для контейнеров и линий. Подключаем анимацию, которая делает линии заметными.
  • JavaScript: Создаем функции для генерации линий в зависимости от текущего размера окна. При изменении размеров экрана линии будут подтягиваться заново, сохраняя отзывчивость.

Заключение

Таким образом, вы создадите анимированную сетку, которая будет адаптироваться к размеру экрана. Вы можете настроить расстояние между линиями и их стиль по своему усмотрению, изменяя значения в CSS и JavaScript. Надеюсь, это поможет вам в вашем проекте! Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать.

Оцените материал
Добавить комментарий

Капча загружается...