111 lines
4.8 KiB
JavaScript
111 lines
4.8 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
|
|
// ===== SCRAMBLE HERO =====
|
|
const heroTitleEl = document.getElementById('heroTitle');
|
|
if (heroTitleEl) {
|
|
const originalText = heroTitleEl.textContent.trim() || 'Технологии будущего на вашей ферме';
|
|
const chars = '!@#$%^&*()_+{}[]|;:,.<>?';
|
|
let iteration = 0;
|
|
let isScrambling = true;
|
|
let frameId = null;
|
|
const maxIterations = 30;
|
|
|
|
function scramble() {
|
|
if (!isScrambling) return;
|
|
const result = originalText
|
|
.split('')
|
|
.map((char, index) => {
|
|
if (index < iteration) return originalText[index];
|
|
if (char === ' ') return ' ';
|
|
return chars[Math.floor(Math.random() * chars.length)];
|
|
})
|
|
.join('');
|
|
heroTitleEl.textContent = result;
|
|
iteration += 1;
|
|
if (iteration <= maxIterations) {
|
|
frameId = requestAnimationFrame(scramble);
|
|
} else {
|
|
heroTitleEl.textContent = originalText;
|
|
isScrambling = false;
|
|
if (frameId) {
|
|
cancelAnimationFrame(frameId);
|
|
frameId = null;
|
|
}
|
|
}
|
|
}
|
|
setTimeout(() => {
|
|
scramble();
|
|
}, 300);
|
|
}
|
|
|
|
// ===== FADE-UP =====
|
|
const fadeElements = document.querySelectorAll('.fade-up');
|
|
if (fadeElements.length > 0 && 'IntersectionObserver' in window) {
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('visible');
|
|
observer.unobserve(entry.target);
|
|
}
|
|
});
|
|
}, { threshold: 0.15, rootMargin: '0px 0px -30px 0px' });
|
|
fadeElements.forEach(el => observer.observe(el));
|
|
} else {
|
|
fadeElements.forEach(el => el.classList.add('visible'));
|
|
}
|
|
|
|
// ===== EXPAND BLOCK =====
|
|
const expandContent = document.getElementById('expandContent');
|
|
if (expandContent && 'IntersectionObserver' in window) {
|
|
let isExpanded = false;
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
if (!isExpanded) {
|
|
expandContent.classList.add('expanded');
|
|
isExpanded = true;
|
|
}
|
|
} else {
|
|
if (isExpanded) {
|
|
expandContent.classList.remove('expanded');
|
|
isExpanded = false;
|
|
}
|
|
}
|
|
});
|
|
}, { threshold: 0.25, rootMargin: '0px 0px -30px 0px' });
|
|
observer.observe(expandContent);
|
|
} else if (expandContent) {
|
|
expandContent.classList.add('expanded');
|
|
}
|
|
|
|
// ===== MARQUEE =====
|
|
const marqueeTrack = document.getElementById('marqueeTrack');
|
|
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
|
|
if (prefersReducedMotion.matches && marqueeTrack) {
|
|
marqueeTrack.style.animation = 'none';
|
|
marqueeTrack.style.transform = 'translateX(0)';
|
|
}
|
|
prefersReducedMotion.addEventListener('change', (e) => {
|
|
if (marqueeTrack) {
|
|
if (e.matches) {
|
|
marqueeTrack.style.animation = 'none';
|
|
marqueeTrack.style.transform = 'translateX(0)';
|
|
} else {
|
|
marqueeTrack.style.animation = 'marqueeScroll 30s linear infinite';
|
|
marqueeTrack.style.transform = '';
|
|
}
|
|
}
|
|
});
|
|
|
|
// ===== HERO VIDEO =====
|
|
const heroVideo = document.querySelector('.hero-video');
|
|
if (heroVideo) {
|
|
heroVideo.play().catch(() => {
|
|
document.addEventListener('click', () => {
|
|
heroVideo.play();
|
|
}, { once: true });
|
|
});
|
|
}
|
|
|
|
})(); |