|
|
|
@ -172,86 +172,115 @@ function onTelegramAuth(user) { |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
|
// Общая функция для открытия модальных окон |
|
|
|
|
function modalOpen(triggerSelector, modalSelector) { |
|
|
|
|
const triggers = document.querySelectorAll(triggerSelector); |
|
|
|
|
const modalLogin = document.querySelector('.modal'); |
|
|
|
|
const modalItem = document.querySelector(modalSelector); |
|
|
|
|
const modalAside = modalItem ? modalItem.querySelector('.modal__aside') : null; |
|
|
|
|
document.addEventListener('DOMContentLoaded', function () { |
|
|
|
|
// Функция для обновления ширины .modal__aside |
|
|
|
|
function updateAsideWidth() { |
|
|
|
|
const modalItem = document.querySelector('.modal__item.active'); |
|
|
|
|
if (modalItem) { |
|
|
|
|
const aside = modalItem.querySelector('.modal__aside'); |
|
|
|
|
if (aside) { |
|
|
|
|
aside.classList.add('active'); // Используем CSS для анимации ширины |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Общая функция для открытия модальных окон |
|
|
|
|
function modalOpen(triggerSelector, modalSelector) { |
|
|
|
|
const triggers = document.querySelectorAll(triggerSelector); |
|
|
|
|
const modal = document.querySelector('.modal'); |
|
|
|
|
const modalItem = document.querySelector(modalSelector); |
|
|
|
|
const modalAside = modalItem ? modalItem.querySelector('.modal__aside') : null; |
|
|
|
|
|
|
|
|
|
triggers.forEach(trigger => { |
|
|
|
|
trigger.addEventListener('click', (e) => { |
|
|
|
|
e.preventDefault(); // Предотвращаем стандартное поведение |
|
|
|
|
triggers.forEach(trigger => { |
|
|
|
|
// Удаляем старые обработчики, чтобы избежать дублирования |
|
|
|
|
trigger.removeEventListener('click', handleModalOpen); |
|
|
|
|
trigger.addEventListener('click', handleModalOpen); |
|
|
|
|
|
|
|
|
|
// Сбрасываем стили и классы для всех модальных окон |
|
|
|
|
document.querySelectorAll('.modal__item').forEach(item => { |
|
|
|
|
item.classList.remove('active'); |
|
|
|
|
item.style.cssText = ''; // Сбрасываем opacity, filter и другие стили |
|
|
|
|
const aside = item.querySelector('.modal__aside'); |
|
|
|
|
if (aside) { |
|
|
|
|
aside.style.width = ''; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
function handleModalOpen(e) { |
|
|
|
|
e.preventDefault(); |
|
|
|
|
|
|
|
|
|
// Открываем нужное модальное окно |
|
|
|
|
if (modalLogin && modalItem) { |
|
|
|
|
modal.classList.add('active'); |
|
|
|
|
modalItem.classList.add('active'); |
|
|
|
|
modalItem.style.opacity = '1'; // Устанавливаем видимость |
|
|
|
|
modalItem.style.filter = 'blur(0px)'; // Убираем размытие |
|
|
|
|
if (modalAside) { |
|
|
|
|
modalAside.style.width = '500px'; // Устанавливаем ширину |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
// Сбрасываем стили и классы для всех модальных окон |
|
|
|
|
document.querySelectorAll('.modal__item').forEach(item => { |
|
|
|
|
item.classList.remove('active'); |
|
|
|
|
item.style.cssText = ''; // Сбрасываем стили |
|
|
|
|
const aside = item.querySelector('.modal__aside'); |
|
|
|
|
if (aside) { |
|
|
|
|
aside.classList.remove('active'); |
|
|
|
|
aside.style.width = ''; // Сбрасываем style.width |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Общая функция для закрытия модальных окон |
|
|
|
|
function modalClose(closeSelector) { |
|
|
|
|
const closes = document.querySelectorAll(closeSelector); |
|
|
|
|
const modalLogin = document.querySelector('.modal'); |
|
|
|
|
// Открываем нужное модальное окно |
|
|
|
|
if (modal && modalItem) { |
|
|
|
|
modal.classList.add('active'); |
|
|
|
|
modalItem.classList.add('active'); |
|
|
|
|
if (modalAside) { |
|
|
|
|
modalAside.classList.add('active'); // Используем CSS для анимации |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
closes.forEach(close => { |
|
|
|
|
close.addEventListener('click', () => { |
|
|
|
|
document.querySelectorAll('.modal__item').forEach(item => { |
|
|
|
|
item.classList.remove('active'); |
|
|
|
|
item.style.cssText = ''; // Сбрасываем opacity, filter и другие стили |
|
|
|
|
const aside = item.querySelector('.modal__aside'); |
|
|
|
|
if (aside) { |
|
|
|
|
aside.style.width = ''; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
if (modalLogin) { |
|
|
|
|
modal.classList.remove('active'); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
// Общая функция для закрытия модальных окон |
|
|
|
|
function modalClose(closeSelector) { |
|
|
|
|
const closes = document.querySelectorAll(closeSelector); |
|
|
|
|
const modal = document.querySelector('.modal'); |
|
|
|
|
|
|
|
|
|
// Обработчик клика по фону модального окна |
|
|
|
|
const modalLogin = document.querySelector('.modal'); |
|
|
|
|
if (modalLogin) { |
|
|
|
|
modal.addEventListener('click', (event) => { |
|
|
|
|
if (event.target.classList.contains('modal')) { |
|
|
|
|
const modalItem = modal.querySelector('.modal__item.active'); |
|
|
|
|
if (modalItem) { |
|
|
|
|
const aside = modalItem.querySelector('.modal__aside'); |
|
|
|
|
if (aside) { |
|
|
|
|
aside.style.width = '0px'; |
|
|
|
|
} |
|
|
|
|
modalItem.style.opacity = '0'; // Анимация закрытия |
|
|
|
|
modalItem.style.filter = 'blur(10px)'; |
|
|
|
|
setTimeout(() => { |
|
|
|
|
modalItem.classList.remove('active'); |
|
|
|
|
modalItem.style.cssText = ''; // Сбрасываем все стили после анимации |
|
|
|
|
modal.classList.remove('active'); |
|
|
|
|
}, 300); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
closes.forEach(close => { |
|
|
|
|
// Удаляем старые обработчики |
|
|
|
|
close.removeEventListener('click', handleModalClose); |
|
|
|
|
close.addEventListener('click', handleModalClose); |
|
|
|
|
|
|
|
|
|
function handleModalClose() { |
|
|
|
|
document.querySelectorAll('.modal__item').forEach(item => { |
|
|
|
|
const aside = item.querySelector('.modal__aside'); |
|
|
|
|
if (aside) { |
|
|
|
|
aside.classList.remove('active'); // Запускаем анимацию закрытия |
|
|
|
|
} |
|
|
|
|
item.classList.remove('active'); |
|
|
|
|
item.style.cssText = ''; // Сбрасываем стили |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
if (modal) { |
|
|
|
|
modal.classList.remove('active'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Обработчик клика по фону модального окна |
|
|
|
|
const modal = document.querySelector('.modal'); |
|
|
|
|
if (modal) { |
|
|
|
|
modal.addEventListener('click', (event) => { |
|
|
|
|
if (event.target.classList.contains('modal')) { |
|
|
|
|
const modalItem = modal.querySelector('.modal__item.active'); |
|
|
|
|
if (modalItem) { |
|
|
|
|
const aside = modalItem.querySelector('.modal__aside'); |
|
|
|
|
if (aside) { |
|
|
|
|
aside.classList.remove('active'); // Запускаем анимацию закрытия |
|
|
|
|
} |
|
|
|
|
modalItem.classList.remove('active'); |
|
|
|
|
modal.classList.remove('active'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Вызываем функции для привязки обработчиков |
|
|
|
|
modalOpen('.button--filter', '.modal__filter'); |
|
|
|
|
modalOpen('.basket-open', '.modal__basket'); |
|
|
|
|
modalOpen('.login-open', '.modal__login'); |
|
|
|
|
modalOpen('.open-to-know', '.modal__to-know'); |
|
|
|
|
modalClose('.modal__close'); |
|
|
|
|
modalClose('.modal-form-sub__close'); |
|
|
|
|
|
|
|
|
|
// Обновляем ширину при изменении размера окна |
|
|
|
|
window.addEventListener('resize', () => { |
|
|
|
|
updateAsideWidth(); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Обновляем ширину при загрузке страницы |
|
|
|
|
updateAsideWidth(); |
|
|
|
|
}); |
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|