// Language switching functionality
let currentLang = localStorage.getItem('language') || 'cn';
let langData = {};
async function loadLanguage(lang) {
try {
const res = await fetch(`config/lang-${lang}.json`);
langData = await res.json();
updatePageLanguage();
localStorage.setItem('language', lang);
currentLang = lang;
// Update active state for language options
document.querySelectorAll('.lang-option').forEach(option => {
if (option.getAttribute('data-lang') === lang) {
option.classList.add('active');
} else {
option.classList.remove('active');
}
});
// Reload services and cases with new language
loadServices();
loadCases(); // 重新加载视频以更新语言
} catch (err) {
console.error("加载语言文件失败:", err);
}
}
function updatePageLanguage() {
// Update all elements with data-i18n attribute
document.querySelectorAll('[data-i18n]').forEach(element => {
const key = element.getAttribute('data-i18n');
const translation = getNestedTranslation(langData, key);
if (translation) {
element.textContent = translation;
}
});
}
function getNestedTranslation(obj, path) {
return path.split('.').reduce((current, key) => current?.[key], obj);
}
async function loadServices() {
try {
const res = await fetch(`config/card-${currentLang}.json`);
const cards = await res.json();
const grid = document.getElementById("servicesGrid");
grid.innerHTML = ''; // Clear existing content
cards.forEach(item => {
const card = document.createElement("div");
card.className = "service-card";
// 判断 src 是图片还是图标
let content;
if (/\.(png|jpe?g|gif|webp|svg)$/i.test(item.src)) {
content = ``;
} else {
content = ``;
}
card.innerHTML = `
${item.desc}
暂无合作伙伴数据
'; } } document.addEventListener("DOMContentLoaded", () => { loadCases(); loadServices(); loadPartners(); // Load initial language loadLanguage(currentLang); // Language toggle button event - handle clicks on language options const langBtn = document.getElementById('langToggle'); if (langBtn) { langBtn.addEventListener('click', (e) => { const target = e.target; if (target.classList.contains('lang-option')) { const selectedLang = target.getAttribute('data-lang'); if (selectedLang !== currentLang) { loadLanguage(selectedLang); } } }); } }); async function loadCases() { try { // 从后台 API 获取视频数据 const res = await fetch('/api/videos/public'); const result = await res.json(); if (!result.success) { throw new Error(result.message || '获取视频数据失败'); } const cases = result.data; const grid = document.getElementById("casesGrid"); grid.innerHTML = ''; // Clear existing content // 根据当前语言选择标题和描述 cases.forEach(item => { const card = document.createElement("div"); card.className = "case-card"; card.setAttribute("data-video", item.video_url); const title = currentLang === 'cn' ? item.title_cn : item.title_en; const desc = currentLang === 'cn' ? item.desc_cn : item.desc_en; // 使用封面图 card.innerHTML = `暂无视频数据
'; } } function bindVideoModal() { const modal = document.getElementById("videoModal"); const modalVideo = document.getElementById("modalVideo"); const closeBtn = modal.querySelector(".close-btn"); // 点击卡片播放 document.querySelectorAll(".case-card .play-button").forEach(button => { button.addEventListener("click", () => { const videoSrc = button.parentElement.getAttribute("data-video"); modal.style.display = "flex"; modalVideo.src = videoSrc; modalVideo.play(); }); }); // 关闭按钮 closeBtn.addEventListener("click", () => { modal.style.display = "none"; modalVideo.pause(); modalVideo.src = ""; }); // 点击遮罩层关闭 modal.addEventListener("click", (e) => { if (e.target === modal) { modal.style.display = "none"; modalVideo.pause(); modalVideo.src = ""; } }); } // const hamburger = document.querySelector('.hamburger'); const navLinks = document.querySelector('.nav-links'); // hamburger.addEventListener('click', () => { // navLinks.classList.toggle('active'); // }); window.addEventListener('scroll', () => { const header = document.querySelector('header'); if (window.scrollY > 100) { header.classList.add('scrolled'); } else { header.classList.remove('scrolled'); } }); document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const targetId = this.getAttribute('href'); if (targetId === '#') return; const targetElement = document.querySelector(targetId); if (targetElement) { navLinks.classList.remove('active'); window.scrollTo({ top: targetElement.offsetTop - 80, behavior: 'smooth' }); } }); });