File size: 3,481 Bytes
4593d72
cfaca32
 
 
 
4064ddb
4593d72
 
4064ddb
 
 
 
 
 
 
 
4593d72
 
 
 
 
 
 
 
4064ddb
4593d72
4064ddb
4593d72
 
4064ddb
 
4593d72
 
 
 
 
4064ddb
 
 
4593d72
 
 
 
 
 
 
 
4064ddb
4593d72
 
 
 
 
 
 
cfaca32
4593d72
4064ddb
4593d72
4064ddb
4593d72
4064ddb
4593d72
 
4064ddb
4593d72
cfaca32
 
4593d72
 
 
 
 
 
 
 
 
 
 
 
cfaca32
4593d72
 
 
 
 
4064ddb
 
4593d72
4064ddb
556ed46
 
 
 
 
 
 
 
cfaca32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Плавная прокрутка
function scrollToContact() {
    document.querySelector('#contact').scrollIntoView({ behavior: 'smooth' });
}

// Кастомный курсор (только для десктопов)
const cursor = document.querySelector('.cursor');
const follower = document.querySelector('.cursor-follower');
if (window.innerWidth > 768) {
    document.addEventListener('mousemove', (e) => {
        cursor.style.left = `${e.clientX}px`;
        cursor.style.top = `${e.clientY}px`;
        follower.style.left = `${e.clientX - 20}px`;
        follower.style.top = `${e.clientY - 20}px`;
    });
}

// WebGL фон
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ alpha: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.getElementById('webgl-bg').appendChild(renderer.domElement);

const geometry = new THREE.TorusKnotGeometry(5, 1.5, 100, 16);
const material = new THREE.MeshBasicMaterial({
    color: 0xff6b6b,
    wireframe: true
});
const torusKnot = new THREE.Mesh(geometry, material);
scene.add(torusKnot);

camera.position.z = 15;

function animateWebGL() {
    requestAnimationFrame(animateWebGL);
    torusKnot.rotation.x += 0.015;
    torusKnot.rotation.y += 0.015;
    torusKnot.scale.setScalar(1 + Math.sin(Date.now() * 0.001) * 0.1);
    renderer.render(scene, camera);
}
animateWebGL();

// Параллакс-эффект
document.addEventListener('mousemove', (e) => {
    const parallaxElements = document.querySelectorAll('[data-parallax]');
    parallaxElements.forEach(el => {
        const speed = 0.07;
        const x = (window.innerWidth - e.pageX * speed) / 100;
        const y = (window.innerHeight - e.pageY * speed) / 100;
        el.style.transform = `translate(${x}px, ${y}px)`;
    });
});

// Анимация загрузки
document.addEventListener('DOMContentLoaded', () => {
    const elements = [document.querySelector('.cta-button'), ...document.querySelectorAll('.service-card')];
    elements.forEach((el, index) => {
        el.style.opacity = '0';
        el.style.transform = 'translateY(30px)';
        setTimeout(() => {
            el.style.transition = 'all 1s ease';
            el.style.opacity = '1';
            el.style.transform = 'translateY(0)';
        }, 200 + index * 150);
    });
});

// Отслеживание груза (демо)
function trackCargo() {
    const trackNum = document.getElementById('track-input').value;
    if (trackNum) {
        alert(`Груз ${trackNum}: В пути (этап 2/4). Ожидаемое время прибытия: 28 февраля 2025.`);
    } else {
        alert('Введите номер груза!');
    }
}

// Обработка формы
document.getElementById('contact-form').addEventListener('submit', (e) => {
    e.preventDefault();
    alert('Заявка успешно отправлена! Мы свяжемся с вами в течение 24 часов.');
});

// Vanilla Tilt для карточек
VanillaTilt.init(document.querySelectorAll('.service-card'), {
    max: 25,
    speed: 400,
    glare: true,
    'max-glare': 0.4
});

// Мобильное меню
const menuToggle = document.querySelector('.menu-toggle');
const navList = document.querySelector('.nav-list');

menuToggle.addEventListener('click', () => {
    navList.classList.toggle('active');
});