Падающие снежинки

С эффектом параллакса и разными размерами

Демонстрация эффекта

Снежинки падают с разной скоростью, создавая эффект глубины (параллакса). Более крупные снежинки падают быстрее, создавая ощущение трехмерности.

Как это работает

• Снежинки создаются с помощью JavaScript и добавляются в контейнер

• Каждая снежинка имеет случайный размер, скорость и начальную позицию

• Эффект параллакса достигается за счет разной скорости падения

• При достижении нижней границы снежинки возвращаются вверх

Количество снежинок: 0

Код для встраивания на ваш сайт

// 1. Добавьте этот контейнер в HTML-файл
<div id="snowflakes-container" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 9999;"></div>

// 2. Добавьте этот JavaScript код перед закрывающим тегом </body>
<script>
    // Конфигурация
    const config = {
        snowflakeCount: 80,
        minSize: 5,
        maxSize: 20,
        minSpeed: 0.5,
        maxSpeed: 2.5,
        colors: ['#ffffff', '#e3f2fd', '#bbdefb', '#90caf9']
    };
    
    // Создание снежинок
    function createSnowflakes() {
        const container = document.getElementById('snowflakes-container');
        if (!container) return;
        
        // Очищаем контейнер перед созданием новых снежинок
        container.innerHTML = '';
        
        for (let i = 0; i < config.snowflakeCount; i++) {
            createSnowflake(container);
        }
        
        // Обновляем счетчик снежинок
        updateSnowflakeCount();
    }
    
    // Создание одной снежинки
    function createSnowflake(container) {
        const snowflake = document.createElement('div');
        
        // Размер снежинки
        const size = Math.random() * (config.maxSize - config.minSize) + config.minSize;
        
        // Скорость падения (для эффекта параллакса)
        const speed = Math.random() * (config.maxSpeed - config.minSpeed) + config.minSpeed;
        
        // Начальная позиция
        const startX = Math.random() * 100;
        const startY = Math.random() * -20;
        
        // Цвет снежинки
        const color = config.colors[Math.floor(Math.random() * config.colors.length)];
        
        // Настройка стилей
        snowflake.style.position = 'absolute';
        snowflake.style.width = `${size}px`;
        snowflake.style.height = `${size}px`;
        snowflake.style.backgroundColor = color;
        snowflake.style.borderRadius = '50%';
        snowflake.style.left = `${startX}vw`;
        snowflake.style.top = `${startY}vh`;
        snowflake.style.opacity = `${0.5 + Math.random() * 0.5}`;
        snowflake.style.boxShadow = '0 0 5px rgba(255, 255, 255, 0.5)';
        snowflake.style.pointerEvents = 'none';
        
        // Добавляем снежинку в контейнер
        container.appendChild(snowflake);
        
        // Анимация падения
        animateSnowflake(snowflake, speed, size);
    }
    
    // Анимация падения снежинки
    function animateSnowflake(snowflake, speed, size) {
        let x = parseFloat(snowflake.style.left);
        let y = parseFloat(snowflake.style.top);
        
        // Случайное смещение по горизонтали
        const drift = (Math.random() - 0.5) * 0.5;
        
        function fall() {
            y += speed;
            x += drift + Math.sin(y / 100) * 0.3; // Легкое колебание
            
            // Если снежинка достигла нижней границы, возвращаем её наверх
            if (y > 100) {
                y = -5;
                x = Math.random() * 100;
            }
            
            // Если снежинка вышла за горизонтальные границы
            if (x > 100) x = 0;
            if (x < 0) x = 100;
            
            snowflake.style.left = `${x}vw`;
            snowflake.style.top = `${y}vh`;
            
            // Запрашиваем следующий кадр анимации
            snowflake.animationId = requestAnimationFrame(fall);
        }
        
        // Начинаем анимацию
        fall();
    }
    
    // Обновление счетчика снежинок
    function updateSnowflakeCount() {
        const container = document.getElementById('snowflakes-container');
        if (!container) return;
        
        const countElement = document.getElementById('snowflake-count');
        if (countElement) {
            countElement.textContent = container.children.length;
        }
    }
    
    // Инициализация при загрузке страницы
    window.addEventListener('DOMContentLoaded', createSnowflakes);
    
    // Пересоздание снежинок при изменении размера окна
    window.addEventListener('resize', createSnowflakes);
</script>