Files
sts-avto/public/nav.js
2026-05-05 13:54:28 +05:00

109 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
document.addEventListener('DOMContentLoaded', () => {
const navContainer = document.getElementById('nav-container');
if (!navContainer) return;
// ----- 1. Создание структуры меню (как было) -----
const mainMenu = [
{ href: '/demontazh', title: 'Демонтаж и капремонт трубопроводов' },
{ href: '/ustranenie', title: 'Устранение дефектов (КМТ)' }
];
const extraMenu = [
{ href: '/personnel', title: 'Аттестованный персонал' },
{ href: '/fleet', title: 'Парк техники (не старше 5 лет)' },
{ href: '/certificates', title: 'ИСО 9001, OHSAS 18001, ИСО 14001' },
{ href: '/license', title: 'Лицензия СРО' },
{ href: '/waste-license', title: 'Лицензия на отходы IIV класса' },
{ href: '/scrap-license', title: 'Лицензия на лом чёрных и цветных металлов' }
];
const currentPath = window.location.pathname;
const isActive = (href) => {
if (href === '/' && currentPath === '/') return true;
if (href !== '/' && currentPath.startsWith(href)) return true;
return false;
};
const nav = document.createElement('nav');
nav.className = 'main-nav';
const ul = document.createElement('ul');
ul.className = 'nav-buttons';
mainMenu.forEach(item => {
const li = document.createElement('li');
const a = document.createElement('a');
a.href = item.href;
a.textContent = item.title;
if (isActive(item.href)) a.classList.add('active');
li.appendChild(a);
ul.appendChild(li);
});
nav.appendChild(ul);
const extraDiv = document.createElement('div');
extraDiv.className = 'extra-nav';
const extraTitle = document.createElement('div');
extraTitle.className = 'extra-title';
extraTitle.textContent = 'Наши преимущества, сертификаты и лицензии:';
extraDiv.appendChild(extraTitle);
const extraButtons = document.createElement('div');
extraButtons.className = 'extra-buttons';
extraMenu.forEach(item => {
const a = document.createElement('a');
a.href = item.href;
a.textContent = item.title;
a.className = 'extra-btn';
extraButtons.appendChild(a);
});
extraDiv.appendChild(extraButtons);
nav.appendChild(extraDiv);
navContainer.appendChild(nav);
// ----- 2. Стили для плавного скрытия всего контейнера -----
const style = document.createElement('style');
style.textContent = `
#nav-container {
transition: opacity 0.3s ease, visibility 0.3s ease, padding 0.3s ease, margin 0.3s ease;
opacity: 1;
visibility: visible;
}
#nav-container.hidden-nav {
opacity: 0;
visibility: hidden;
padding: 0 !important;
margin: 0 !important;
height: 0 !important;
overflow: hidden;
}
`;
document.head.appendChild(style);
// ----- 3. Логика: скрываем при скролле вниз, показываем только в самом верху -----
let lastScrollY = window.scrollY;
let ticking = false;
const handleScroll = () => {
const currentScrollY = window.scrollY;
const direction = currentScrollY > lastScrollY ? 'down' : 'up';
if (direction === 'down') {
// При движении вниз — скрываем навигацию
navContainer.classList.add('hidden-nav');
} else if (direction === 'up') {
// При движении вверх — показываем только если мы в самом верху
if (currentScrollY === 0) {
navContainer.classList.remove('hidden-nav');
}
}
lastScrollY = currentScrollY;
ticking = false;
};
window.addEventListener('scroll', () => {
if (!ticking) {
requestAnimationFrame(handleScroll);
ticking = true;
}
});
});