// --- Логика для myModal-img ---
const openBtnImg = document.getElementById('openModalBtn-img');
const closeBtnImg = document.getElementById('closeModalBtn-img');
const modalImg = document.getElementById('myModal-img');
// Безопасная проверка существования элементов перед добавлением событий
if (openBtnImg && modalImg) {
openBtnImg.addEventListener('click', () => {
modalImg.classList.add('open');
});
}
if (closeBtnImg && modalImg) {
closeBtnImg.addEventListener('click', () => {
modalImg.classList.remove('open');
});
}
if (modalImg) {
modalImg.addEventListener('click', (event) => {
// Исправлено: закрываем, если клик был именно по фону модалки, а не по body
if (event.target === modalImg) {
modalImg.classList.remove('open');
}
});
}
// --- Логика для myModal-more ---
const openBtnMore = document.getElementById('openModalBtn-more');
const closeBtnMore = document.getElementById('closeModalBtn-more');
const modalMore = document.getElementById('myModal-more');
if (openBtnMore && modalMore) {
openBtnMore.addEventListener('click', () => {
modalMore.classList.add('open');
});
}
if (closeBtnMore && modalMore) {
closeBtnMore.addEventListener('click', () => {
modalMore.classList.remove('open');
});
}
if (modalMore) {
modalMore.addEventListener('click', (event) => {
if (event.target === modalMore) {
modalMore.classList.remove('open');
}
});
}
const updateCarousel = (animate = true) => {
// 1. Устанавливаем transition
track.style.transition = animate ? "transform 0.6s cubic-bezier(0.22, 1, 0.36, 1)" : "none";
const slideWidth = slides[0].offsetWidth;
const gap = parseInt(window.getComputedStyle(track).gap) || 0;
const viewportWidth = track.parentElement.offsetWidth;
const centerOffset = (viewportWidth - slideWidth) / 2;
const position = -(currentIndex * (slideWidth + gap)) + centerOffset;
// 2. Двигаем трек
track.style.transform = `translateX(${position}px)`;
// 3. ПРИНУДИТЕЛЬНЫЙ REFLOW: Если мы прыгаем без анимации (клоны),
// заставляем браузер применить изменения прямо сейчас, чтобы избежать рывков
if (!animate) {
track.offsetHeight;
}
slides.forEach((s, i) => s.classList.toggle("active", i === currentIndex));
};
const moveSlide = (direction) => {
if (isTransitioning) return;
isTransitioning = true;
currentIndex += direction;
updateCarousel(true); // Явно указываем true для обычного скролла
};
// ... события кнопок и transitionend оставляете как есть ...
window.addEventListener("resize", () => updateCarousel(false));
// Инициализация только после полной загрузки всех картинок
window.addEventListener("load", () => {
updateCarousel(false);
});