diff --git a/public/themes/dist_static/static/css/about.css b/public/themes/dist_static/static/css/about.css index 9aeaead..30c0d17 100644 --- a/public/themes/dist_static/static/css/about.css +++ b/public/themes/dist_static/static/css/about.css @@ -466,9 +466,19 @@ background: rgba(255, 255, 255, 0.2); overflow: hidden; } -.ab-members__panels { - position: relative; +.ab-members__panels-swiper { + width: 100%; min-width: 0; + overflow: hidden; +} +.ab-members__panels-swiper .ab-members__panels { + display: flex; + box-sizing: border-box; +} +.ab-members__panel { + width: 100%; + box-sizing: border-box; + height: auto; } .ab-members__content { display: flex; @@ -498,19 +508,25 @@ .ab-members__more { min-width: 12.5rem; } -.ab-members__logos-swiper { - width: 100%; - overflow: hidden; -} -.ab-members__logos-swiper .ab-members__logos { +.ab-members__logos { display: flex; - box-sizing: border-box; + flex-wrap: nowrap; + align-items: center; + gap: 1rem; + overflow-x: auto; + overflow-y: hidden; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; +} +.ab-members__logos::-webkit-scrollbar { + display: none; } .ab-members__logo { display: flex; align-items: center; justify-content: center; - width: 100%; + flex: 0 0 auto; + width: 10rem; height: 6.25rem; padding: 0; border: 0; @@ -528,6 +544,7 @@ height: auto; object-fit: cover; } +.ab-members__logo.is-active, .ab-members__logo.active, .ab-members__logo:hover { background: rgb(255, 255, 255); diff --git a/public/themes/dist_static/static/js/about.js b/public/themes/dist_static/static/js/about.js index c004261..7dfbc83 100644 --- a/public/themes/dist_static/static/js/about.js +++ b/public/themes/dist_static/static/js/about.js @@ -74,43 +74,53 @@ function initHonorsToggle() { btn.querySelector("span").textContent = expanded ? t("about.collapse") : t("about.expand_more"); }); } -function initMembersLogosSwiper() { - const el = document.querySelector(".ab-members__logos-swiper"); - if (!el || !window.Swiper) return; - const count = el.querySelectorAll(".ab-members__logo").length; - const enableCarousel = count > 5; +function initMembersCarousel() { + const root = document.querySelector(".ab-members"); + const SwiperCtor = window.Swiper; + if (!root || !SwiperCtor) return; + const el = root.querySelector(".ab-members__panels-swiper"); + const buttons = [...root.querySelectorAll(".ab-members__logo")]; + if (!el || !buttons.length) return; const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; - new window.Swiper(el, { - slidesPerView: 5, - spaceBetween: 16, - watchOverflow: true, - rewind: enableCarousel, - autoplay: enableCarousel && !reduceMotion ? { + const canLoop = buttons.length > 1; + const swiper = new SwiperCtor(el, { + initialSlide: Math.max(0, buttons.findIndex((btn) => btn.classList.contains("is-active"))), + loop: canLoop, + grabCursor: true, + speed: 600, + autoplay: canLoop && !reduceMotion ? { delay: 3e3, disableOnInteraction: false, pauseOnMouseEnter: true - } : false, - breakpoints: { - 0: { - slidesPerView: 2, - spaceBetween: 12 - }, - 576: { - slidesPerView: 3, - spaceBetween: 16 - }, - 993: { - slidesPerView: 5, - spaceBetween: 16 - } + } : false + }); + const logos = root.querySelector(".ab-members__logos"); + const syncNav = (index) => { + buttons.forEach((btn, i) => { + const on = i === index; + btn.classList.toggle("is-active", on); + btn.setAttribute("aria-selected", on ? "true" : "false"); + }); + const btn = buttons[index]; + if (logos && btn) { + const left = btn.offsetLeft - (logos.clientWidth - btn.offsetWidth) / 2; + logos.scrollTo({ left: Math.max(0, left), behavior: "smooth" }); } + }; + buttons.forEach((btn, i) => { + btn.addEventListener("click", () => { + if (canLoop) swiper.slideToLoop(i); + else swiper.slideTo(i); + }); }); + swiper.on("slideChange", () => syncNav(swiper.realIndex)); + syncNav(swiper.realIndex); } $(function() { setActiveNav(); initHistorySwiper(); counterUpInit(); initHonorsToggle(); - initMembersLogosSwiper(); + initMembersCarousel(); }); //#endregion diff --git a/public/themes/website/1/en/demo/about.html b/public/themes/website/1/en/demo/about.html index a13af14..a12cc52 100644 --- a/public/themes/website/1/en/demo/about.html +++ b/public/themes/website/1/en/demo/about.html @@ -227,36 +227,36 @@
- {$case_top.content|strip_tags} -
+- {$case_top.content|strip_tags} -
+