(function () { const slider = document.querySelector('.company-grid'); const cards = document.querySelectorAll('.company-card'); const prevBtn = document.querySelector('.pl-prev'); const nextBtn = document.querySelector('.pl-next'); const dotsCont = document.querySelector('.slider-dots'); if (!slider || !cards.length) return; let currentIndex = 0; let autoTimer; function getMetrics() { const gap = 22; const cardW = cards[0].offsetWidth + gap; const viewW = slider.parentElement.offsetWidth; const perView = Math.max(1, Math.floor(viewW / cardW)); const maxIdx = Math.max(0, cards.length - perView); return { cardW, perView, maxIdx }; } function buildDots() { const { maxIdx } = getMetrics(); dotsCont.innerHTML = ''; for (let i = 0; i <= maxIdx; i++) { const d = document.createElement('div'); d.className = 'dot' + (i === currentIndex ? ' active' : ''); d.addEventListener('click', () => goTo(i)); dotsCont.appendChild(d); } } function updateDots() { dotsCont.querySelectorAll('.dot').forEach((d, i) => d.classList.toggle('active', i === currentIndex)); } function goTo(idx) { const { cardW, maxIdx } = getMetrics(); currentIndex = ((idx % (maxIdx + 1)) + (maxIdx + 1)) % (maxIdx + 1); slider.style.transform = `translateX(-${currentIndex * cardW}px)`; updateDots(); } function next() { goTo(currentIndex + 1); } function prev() { goTo(currentIndex - 1); } function startAuto() { clearInterval(autoTimer); autoTimer = setInterval(next, 3000); } prevBtn.addEventListener('click', () => { prev(); startAuto(); }); nextBtn.addEventListener('click', () => { next(); startAuto(); }); slider.addEventListener('mouseenter', () => clearInterval(autoTimer)); slider.addEventListener('mouseleave', startAuto); window.addEventListener('resize', () => { const { maxIdx } = getMetrics(); currentIndex = Math.min(currentIndex, maxIdx); buildDots(); goTo(currentIndex); }); buildDots(); startAuto(); })();