You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.2 KiB
119 lines
3.2 KiB
import "./common.js";
|
|
//#region js/solution.js
|
|
function setActiveNav() {
|
|
const pageNav = document.querySelector("[data-nav]")?.getAttribute("data-nav");
|
|
if (!pageNav) return;
|
|
document.querySelectorAll(".site-header__nav a").forEach((link) => {
|
|
const active = link.textContent.trim().startsWith(pageNav);
|
|
link.classList.toggle("is-active", active);
|
|
});
|
|
}
|
|
function initCoreSwiper() {
|
|
const root = document.querySelector(".sl-core");
|
|
const el = root?.querySelector(".sl-core__swiper");
|
|
if (!root || !el || !window.Swiper) return;
|
|
const slideCount = el.querySelectorAll(".swiper-wrapper > .swiper-slide").length;
|
|
// 一屏展示 3 条,不超过 3 条时隐藏切换按钮
|
|
if (slideCount <= 3) {
|
|
root.querySelectorAll(".sl-core__head .s-arrows").forEach((node) => {
|
|
node.style.display = "none";
|
|
});
|
|
}
|
|
new window.Swiper(el, {
|
|
slidesPerView: 3,
|
|
spaceBetween: 40,
|
|
speed: 600,
|
|
watchOverflow: true,
|
|
navigation: {
|
|
prevEl: root.querySelector(".sl-core__head .s-arrows__prev"),
|
|
nextEl: root.querySelector(".sl-core__head .s-arrows__next")
|
|
},
|
|
breakpoints: {
|
|
0: {
|
|
slidesPerView: 1.3,
|
|
spaceBetween: 20,
|
|
navigation: {
|
|
prevEl: root.querySelector(".sl-core__arrows-mobile .s-arrows__prev"),
|
|
nextEl: root.querySelector(".sl-core__arrows-mobile .s-arrows__next")
|
|
}
|
|
},
|
|
768: {
|
|
slidesPerView: 2,
|
|
spaceBetween: 24
|
|
},
|
|
1200: {
|
|
slidesPerView: 3,
|
|
spaceBetween: 40
|
|
}
|
|
}
|
|
});
|
|
}
|
|
/** 经典案例:文案 fade + 图片 creative,双 Swiper 同步 */
|
|
function initCasesSwipers() {
|
|
const root = document.querySelector(".sl-cases");
|
|
const contentEl = root?.querySelector(".sl-cases__content-swiper");
|
|
const mediaEl = root?.querySelector(".sl-cases__media-swiper");
|
|
if (!root || !contentEl || !mediaEl || !window.Swiper) return;
|
|
const currentEl = root.querySelector(".sl-cases__pager-current");
|
|
const totalEl = root.querySelector(".sl-cases__pager-total");
|
|
const prevBtn = root.querySelector(".s-arrows__prev");
|
|
const nextBtn = root.querySelector(".s-arrows__next");
|
|
const getOriginalCount = (swiper) => {
|
|
const slides = [...swiper.slides];
|
|
return slides.filter((s) => !s.classList.contains("swiper-slide-duplicate")).length || slides.length;
|
|
};
|
|
const syncPager = (swiper) => {
|
|
if (currentEl) currentEl.textContent = String(swiper.realIndex + 1);
|
|
if (totalEl) totalEl.textContent = String(getOriginalCount(swiper));
|
|
};
|
|
const contentSwiper = new window.Swiper(contentEl, {
|
|
effect: "fade",
|
|
fadeEffect: { crossFade: true },
|
|
loop: true,
|
|
speed: 500,
|
|
allowTouchMove: false,
|
|
observer: true,
|
|
observeParents: true,
|
|
watchOverflow: true
|
|
});
|
|
new window.Swiper(mediaEl, {
|
|
grabCursor: true,
|
|
effect: "creative",
|
|
creativeEffect: {
|
|
prev: {
|
|
shadow: true,
|
|
translate: [
|
|
0,
|
|
0,
|
|
-400
|
|
]
|
|
},
|
|
next: { translate: [
|
|
"100%",
|
|
0,
|
|
0
|
|
] }
|
|
},
|
|
loop: true,
|
|
speed: 600,
|
|
navigation: {
|
|
prevEl: prevBtn,
|
|
nextEl: nextBtn
|
|
},
|
|
on: {
|
|
init(swiper) {
|
|
syncPager(swiper);
|
|
},
|
|
slideChange(swiper) {
|
|
syncPager(swiper);
|
|
if (contentSwiper.realIndex !== swiper.realIndex) contentSwiper.slideToLoop(swiper.realIndex, contentSwiper.params.speed, false);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
$(function() {
|
|
setActiveNav();
|
|
initCoreSwiper();
|
|
initCasesSwipers();
|
|
});
|
|
//#endregion
|