346 lines
12 KiB
JavaScript
346 lines
12 KiB
JavaScript
try {
|
|
var btnOpenMenu = document.querySelector('.burger-btn');
|
|
var headerMenu = document.querySelector('.bottom-header-row');
|
|
if (btnOpenMenu && headerMenu) {
|
|
btnOpenMenu.addEventListener('click', function() {
|
|
document.querySelector('html').style = "overflow: hidden;";
|
|
headerMenu.classList.add('open');
|
|
btnOpenMenu.style="opacity: 0;";
|
|
});
|
|
}
|
|
} catch(e) {
|
|
if (window.console) console.warn('add.js: burger-menu error', e);
|
|
}
|
|
|
|
const boxes = Array.from(document.querySelectorAll(".box__accordion"));
|
|
boxes.forEach((box) => {
|
|
box.addEventListener("click", boxHandler);
|
|
});
|
|
|
|
function boxHandler(e) {
|
|
e.preventDefault();
|
|
let currentBox = e.target.closest(".box__accordion");
|
|
let currentContent = currentBox.querySelector(".box__accordion_content");;
|
|
|
|
currentBox.classList.toggle("active");
|
|
if (currentBox.classList.contains("active")) {
|
|
currentContent.style.maxHeight = currentContent.scrollHeight + 20 + "px";
|
|
} else {
|
|
currentContent.style.maxHeight = 0;
|
|
}
|
|
}
|
|
|
|
const modalRequestForm = document.querySelector('.modal-request-form');
|
|
|
|
document.addEventListener("click", function (event) {
|
|
|
|
const target = event.target;
|
|
|
|
if (target.classList.contains("certificates__item_img")) {
|
|
const screen = document.querySelector('.screen-certificates');
|
|
//screen.querySelector('.screen-certificates__img').innerHTML = event.target.outerHTML;
|
|
document.querySelector('html').style = "overflow: hidden;"
|
|
screen.classList.add('open');
|
|
return;
|
|
}
|
|
if (target.classList.contains("clickRemove") || event.target.classList.contains("btn-close-certificates-img")) {
|
|
document.querySelector('.screen-certificates').classList.remove('open');
|
|
document.querySelector('html').style = "";
|
|
return;
|
|
}
|
|
|
|
if (target.classList.contains("btn-close-header-menu")) {
|
|
headerMenu.classList.remove('open');
|
|
btnOpenMenu.style="";
|
|
document.querySelector('html').style = "";
|
|
return;
|
|
}
|
|
if (target.classList.contains("btn-write") || target.closest('.btn-write-camp')) {
|
|
var campBtn = target.closest('.btn-write-camp');
|
|
if (campBtn && campBtn.tagName === 'A') event.preventDefault();
|
|
modalRequestForm.style="";
|
|
document.querySelector('html').style = "overflow: hidden;";
|
|
// Динамическая загрузка Bitrix24 (иначе не инициализируется в скрытом контейнере)
|
|
var container = modalRequestForm.querySelector('.b24-form-container');
|
|
if (container && !container.querySelector('.b24-form')) {
|
|
var fForm = modalRequestForm.dataset.b24Form;
|
|
var fLoader = modalRequestForm.dataset.b24Loader;
|
|
if (fForm && fLoader) {
|
|
var s = document.createElement('script');
|
|
s.setAttribute('data-b24-form', fForm);
|
|
s.setAttribute('data-skip-moving', 'true');
|
|
s.text = "(function(w,d,u){var s=d.createElement('script');s.async=true;s.src=u+'?'+(Date.now()/180000|0);var h=d.getElementsByTagName('script')[0];h.parentNode.insertBefore(s,h);})(window,document,'" + fLoader + "');";
|
|
container.appendChild(s);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (target.classList.contains("btn-close-request-form") || target.classList.contains("btn-close-request-form-img")) {
|
|
modalRequestForm.style="display: none;";
|
|
document.querySelector('html').style = "";
|
|
return;
|
|
}
|
|
// Клик по фону (затемнению) — закрыть модалку
|
|
if (target === modalRequestForm) {
|
|
modalRequestForm.style="display: none;";
|
|
document.querySelector('html').style = "";
|
|
return;
|
|
}
|
|
|
|
if(target.classList.contains("hover-effect")) {
|
|
target.classList.remove("hover-effect");
|
|
return;
|
|
}
|
|
|
|
if (target.classList.contains("menu-item-has-children")) {
|
|
target.parentNode.classList.add("hover-effect");
|
|
return;
|
|
}
|
|
});
|
|
|
|
/*(function ($) {
|
|
$(document).ready(function () {
|
|
$(".teachers-owl").owlCarousel({
|
|
//autoplay: true,
|
|
loop: false,
|
|
center: true,
|
|
margin: 30,
|
|
autoplayHoverPause: true,
|
|
autoplayTimeout: 4000,
|
|
items: 2,
|
|
dots: false,
|
|
nav: true,
|
|
navText: ['<i></i>', '<i></i>'],
|
|
//navText: ['<i class="fa fa-angle-left"></i>', '<i class="fa fa-angle-right"></i>'],
|
|
responsive: {
|
|
0: { items: 1,
|
|
center: true,
|
|
},
|
|
768: {
|
|
items: 2,
|
|
center: false,
|
|
},
|
|
992: {
|
|
items: 4,
|
|
center: false,
|
|
margin: 36,
|
|
},
|
|
}
|
|
});
|
|
|
|
});
|
|
})(jQuery);*/
|
|
|
|
try {
|
|
var swiperPopularSubjects = new Swiper(".swiper-popular-subjects", {
|
|
spaceBetween: 10,
|
|
slidesPerView: 1,
|
|
speed: 400,
|
|
preventInteractionOnTransition: true,
|
|
keyboard: true,
|
|
breakpoints: {
|
|
680: { slidesPerView: 2, speed: 400 },
|
|
860: { slidesPerView: 3, speed: 400 }
|
|
},
|
|
navigation: { nextEl: ".subject-next", prevEl: ".subject-prev" }
|
|
});
|
|
} catch(e) { /* skip — swiper not on this page */ }
|
|
|
|
try {
|
|
var swiperFoto = new Swiper(".swiper-foto", {
|
|
spaceBetween: 10,
|
|
slidesPerView: 1,
|
|
speed: 400,
|
|
preventInteractionOnTransition: true,
|
|
keyboard: true,
|
|
navigation: { nextEl: ".foto-next", prevEl: ".foto-prev" },
|
|
pagination: { el: ".swiper-pagination", clickable: true }
|
|
});
|
|
} catch(e) { /* skip — swiper not on this page */ }
|
|
|
|
try { var swiperNews = new Swiper(".swiper-news", { spaceBetween: 10, slidesPerView: 1, speed: 400, preventInteractionOnTransition: true, keyboard: true, breakpoints: { 680: { slidesPerView: 2, speed: 400 }, 860: { slidesPerView: 3, speed: 400 } }, navigation: { nextEl: ".news-next", prevEl: ".news-prev" } }); } catch(e) { /* skip */ }
|
|
|
|
try { var swiperCertificates = new Swiper(".certificates-owl", { spaceBetween: 10, slidesPerView: 1, speed: 400, loop: true, preventInteractionOnTransition: true, keyboard: true, navigation: { nextEl: ".certificates-owl-next", prevEl: ".certificates-owl-prev" } }); } catch(e) { /* skip */ }
|
|
|
|
try { var swiperReviews = new Swiper(".reviews-owl", { spaceBetween: 40, speed: 400, slidesPerView: 1, keyboard: true, breakpoints: { 860: { slidesPerView: 2, speed: 400 } }, navigation: { nextEl: ".reviews-owl-next", prevEl: ".reviews-owl-prev" } }); } catch(e) { /* skip */ }
|
|
|
|
try { var swiperTeachers = new Swiper(".teachers-owl", { spaceBetween: 30, speed: 400, slidesPerView: 1, keyboard: true, breakpoints: { 540: { slidesPerView: 2 }, 860: { slidesPerView: 4 }, 992: { slidesPerView: 4, spaceBetween: 36 } }, navigation: { nextEl: ".teachers-owl-next", prevEl: ".teachers-owl-prev" } }); } catch(e) { /* skip */ }
|
|
|
|
setTimeout(() => {
|
|
document.querySelectorAll('.b24-form-content .b24-form-btn').forEach(btn => {
|
|
btn.textContent = 'записаться';
|
|
});
|
|
}, 1000);
|
|
|
|
document.querySelectorAll('.header-menu').forEach(item => {
|
|
item.classList.add('hover-effect');
|
|
});
|
|
|
|
/* ── "Читать ещё" (expand/collapse long reviews) ── */
|
|
(function() {
|
|
'use strict';
|
|
document.querySelectorAll('.review-card__btn-more').forEach(function(btn) {
|
|
btn.addEventListener('click', function() {
|
|
var textBlock = this.closest('.lw-card').querySelector('.lw-card__text');
|
|
if (textBlock) {
|
|
textBlock.classList.toggle('review-card__text--expanded');
|
|
this.textContent = textBlock.classList.contains('review-card__text--expanded')
|
|
? 'Свернуть'
|
|
: 'Читать ещё';
|
|
}
|
|
});
|
|
});
|
|
})();
|
|
|
|
/* ── Reveal animation (IntersectionObserver) ── */
|
|
(function() {
|
|
'use strict';
|
|
var revealElements = document.querySelectorAll('.reveal');
|
|
if (revealElements.length && 'IntersectionObserver' in window) {
|
|
var observer = new IntersectionObserver(
|
|
function(entries) {
|
|
entries.forEach(function(entry) {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('reveal--visible');
|
|
observer.unobserve(entry.target);
|
|
}
|
|
});
|
|
},
|
|
{ threshold: 0.1 }
|
|
);
|
|
revealElements.forEach(function(el) {
|
|
observer.observe(el);
|
|
});
|
|
} else {
|
|
// Fallback: show all immediately
|
|
revealElements.forEach(function(el) {
|
|
el.classList.add('reveal--visible');
|
|
});
|
|
}
|
|
})();
|
|
|
|
/* ── "Показать ещё" — batch load more ── */
|
|
(function() {
|
|
'use strict';
|
|
var loadMoreWrapper = document.getElementById('reviews-loadmore');
|
|
if (!loadMoreWrapper) return;
|
|
var btn = loadMoreWrapper.querySelector('.reviews-loadmore__btn');
|
|
if (!btn) return;
|
|
var nextBatch = 2;
|
|
btn.addEventListener('click', function() {
|
|
var cards = document.querySelectorAll('.lw-card[data-batch="' + nextBatch + '"]');
|
|
if (cards.length) {
|
|
cards.forEach(function(card) {
|
|
card.style.display = 'flex';
|
|
card.classList.add('reveal--visible'); // reveal + batch = видно
|
|
});
|
|
nextBatch++;
|
|
var remaining = document.querySelectorAll('.lw-card[data-batch="' + nextBatch + '"]');
|
|
if (!remaining.length) {
|
|
loadMoreWrapper.style.display = 'none';
|
|
}
|
|
}
|
|
});
|
|
})();
|
|
|
|
/* ── Scroll Progress Bar ── */
|
|
(function() {
|
|
var progressBar = document.createElement('div');
|
|
progressBar.className = 'pksh-scroll-progress';
|
|
document.body.prepend(progressBar);
|
|
|
|
function updateProgress() {
|
|
var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
var docHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight;
|
|
var progress = (scrollTop / docHeight) * 100;
|
|
progressBar.style.width = progress + '%';
|
|
}
|
|
|
|
window.addEventListener('scroll', updateProgress, { passive: true });
|
|
window.addEventListener('resize', updateProgress, { passive: true });
|
|
updateProgress();
|
|
})();
|
|
|
|
/* ── Desktop Sticky CTA — show after hero ── */
|
|
(function() {
|
|
var sticky = document.querySelector('.sticky-cta-desktop');
|
|
var hero = document.querySelector('.banner');
|
|
if (!sticky || !hero) return;
|
|
|
|
var observer = new IntersectionObserver(function(entries) {
|
|
entries.forEach(function(entry) {
|
|
// Show sticky CTA when hero is NOT visible (scrolled past)
|
|
sticky.classList.toggle('visible', !entry.isIntersecting);
|
|
});
|
|
}, { threshold: 0 });
|
|
|
|
observer.observe(hero);
|
|
})();
|
|
|
|
/* ── Mobile banner padding: compensate for fixed header ── */
|
|
(function() {
|
|
var banner = document.querySelector('.page-pksh .banner');
|
|
var header = document.querySelector('.header');
|
|
if (banner && header && window.innerWidth <= 860) {
|
|
var headerH = header.offsetHeight || 76;
|
|
banner.style.paddingTop = headerH + 'px';
|
|
banner.style.marginTop = '-' + headerH + 'px';
|
|
}
|
|
})();
|
|
|
|
/* ── .open-bitrix-form → opens modal form ── */
|
|
document.querySelectorAll('.open-bitrix-form').forEach(btn => {
|
|
btn.addEventListener('click', function(e) {
|
|
const modal = document.querySelector('.modal-request-form');
|
|
if (modal) {
|
|
modal.style = "";
|
|
// Динамическая загрузка Bitrix24
|
|
var container = modal.querySelector('.b24-form-container');
|
|
if (container && !container.querySelector('.b24-form')) {
|
|
var fForm = modal.dataset.b24Form;
|
|
var fLoader = modal.dataset.b24Loader;
|
|
if (fForm && fLoader) {
|
|
var s = document.createElement('script');
|
|
s.setAttribute('data-b24-form', fForm);
|
|
s.setAttribute('data-skip-moving', 'true');
|
|
s.text = "(function(w,d,u){var s=d.createElement('script');s.async=true;s.src=u+'?'+(Date.now()/180000|0);var h=d.getElementsByTagName('script')[0];h.parentNode.insertBefore(s,h);})(window,document,'" + fLoader + "');";
|
|
container.appendChild(s);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
// Закрытие модалки по Escape
|
|
document.addEventListener("keydown", function(e) {
|
|
if (e.key === "Escape") {
|
|
const modal = document.querySelector('.modal-request-form');
|
|
if (modal && modal.style.display !== "none") {
|
|
modal.style.display = "none";
|
|
document.querySelector('html').style = "";
|
|
}
|
|
}
|
|
});
|
|
|
|
/* ── FAQ Accordion (mystyle-accordion) ── */
|
|
document.querySelectorAll('.mystyle-accordion-trigger').forEach(trigger => {
|
|
trigger.addEventListener('click', function(e) {
|
|
const item = this.closest('.mystyle-accordion-item');
|
|
if (!item) return;
|
|
const isOpen = item.classList.contains('active');
|
|
// Закрываем все другие аккордеоны в том же контейнере
|
|
const parent = item.parentElement;
|
|
if (parent) {
|
|
parent.querySelectorAll('.mystyle-accordion-item.active').forEach(other => {
|
|
if (other !== item) {
|
|
other.classList.remove('active');
|
|
}
|
|
});
|
|
}
|
|
if (isOpen) {
|
|
item.classList.remove('active');
|
|
} else {
|
|
item.classList.add('active');
|
|
}
|
|
});
|
|
}); |