File size: 3,873 Bytes
4593d72
cfaca32
 
 
 
4593d72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cfaca32
4593d72
 
 
 
 
 
 
 
 
 
cfaca32
 
4593d72
 
 
 
 
 
 
 
 
 
 
 
cfaca32
4593d72
 
 
 
 
 
 
 
 
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
100
101
102
103
104
105
106
107
108
109
// Плавная прокрутка
function scrollToContact() {
    document.querySelector('#contact').scrollIntoView({ behavior: 'smooth' });
}

// Кастомный курсор
const cursor = document.querySelector('.cursor');
const follower = document.querySelector('.cursor-follower');
document.addEventListener('mousemove', (e) => {
    cursor.style.left = `${e.clientX}px`;
    cursor.style.top = `${e.clientY}px`;
    follower.style.left = `${e.clientX - 15}px`;
    follower.style.top = `${e.clientY - 15}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.SphereGeometry(5, 32, 32);
const material = new THREE.MeshBasicMaterial({
    color: 0xe74c3c,
    wireframe: true
});
const sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);

camera.position.z = 15;

function animateWebGL() {
    requestAnimationFrame(animateWebGL);
    sphere.rotation.x += 0.01;
    sphere.rotation.y += 0.01;
    renderer.render(scene, camera);
}
animateWebGL();

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

// Голосовое управление
const voiceBtn = document.getElementById('voice-btn');
if ('webkitSpeechRecognition' in window) {
    const recognition = new webkitSpeechRecognition();
    recognition.lang = 'ru-RU';
    recognition.onresult = (event) => {
        const transcript = event.results[0][0].transcript;
        if (transcript.toLowerCase().includes('заказать')) {
            scrollToContact();
            alert('Голосовой заказ активирован! Заполните форму ниже.');
        }
    };
    voiceBtn.addEventListener('click', () => {
        recognition.start();
        voiceBtn.textContent = 'Слушаю...';
        setTimeout(() => voiceBtn.textContent = '🎙️ Голосовой заказ', 3000);
    });
} else {
    voiceBtn.style.display = 'none';
}

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

// Отслеживание груза (демо)
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: 20,
    speed: 300,
    glare: true,
    'max-glare': 0.3
});