Testlanding / scripts.js
flpolprojects's picture
Update scripts.js
4593d72 verified
raw
history blame
3.87 kB
// Плавная прокрутка
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
});