|
|
/**
|
|
|
* 专业领域轮播初始化
|
|
|
* 使用 SimpleCarousel 实现一行5个卡片的轮播效果
|
|
|
*/
|
|
|
|
|
|
(function() {
|
|
|
'use strict';
|
|
|
|
|
|
// 等待DOM加载完成
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
|
initProfessionalCarousel();
|
|
|
});
|
|
|
|
|
|
function initProfessionalCarousel() {
|
|
|
const carouselContainer = document.getElementById('professionalCarousel');
|
|
|
if (!carouselContainer) {
|
|
|
console.warn('Professional carousel container not found');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 检查SimpleCarousel是否可用
|
|
|
if (typeof SimpleCarousel === 'undefined') {
|
|
|
console.error('SimpleCarousel is not loaded');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 轮播配置
|
|
|
const carouselOptions = {
|
|
|
autoplay: true,
|
|
|
autoplayDelay: 4000,
|
|
|
loop: true,
|
|
|
navigation: true,
|
|
|
pagination: false,
|
|
|
touchEnabled: true,
|
|
|
slidesPerView: 5, // 一行显示5个卡片
|
|
|
spaceBetween: 20,
|
|
|
onSlideChange: function(currentIndex, previousIndex) {
|
|
|
// 轮播切换时的回调
|
|
|
console.log('Slide changed from', previousIndex, 'to', currentIndex);
|
|
|
|
|
|
// 添加切换动画效果
|
|
|
animateSlideChange(currentIndex, previousIndex);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 初始化轮播
|
|
|
const carousel = new SimpleCarousel(carouselContainer, carouselOptions);
|
|
|
|
|
|
// 存储轮播实例到全局,便于调试
|
|
|
window.professionalCarousel = carousel;
|
|
|
|
|
|
// 添加键盘导航支持
|
|
|
addKeyboardNavigation(carousel);
|
|
|
|
|
|
// 添加鼠标悬停暂停功能
|
|
|
addHoverPause(carousel, carouselContainer);
|
|
|
|
|
|
// 添加加载完成动画
|
|
|
addLoadAnimation(carouselContainer);
|
|
|
|
|
|
console.log('Professional carousel initialized successfully');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加轮播切换动画效果
|
|
|
*/
|
|
|
function animateSlideChange(currentIndex, previousIndex) {
|
|
|
const cards = document.querySelectorAll('.professional-card');
|
|
|
|
|
|
// 为当前显示的卡片添加动画
|
|
|
cards.forEach((card, index) => {
|
|
|
card.classList.remove('slide-in', 'slide-out');
|
|
|
|
|
|
// 计算当前显示的卡片范围(一行5个)
|
|
|
const startIndex = Math.floor(currentIndex / 5) * 5;
|
|
|
const endIndex = startIndex + 4;
|
|
|
|
|
|
if (index >= startIndex && index <= endIndex) {
|
|
|
// 当前显示的卡片
|
|
|
setTimeout(() => {
|
|
|
card.classList.add('slide-in');
|
|
|
}, (index - startIndex) * 100); // 错开动画时间
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加键盘导航支持
|
|
|
*/
|
|
|
function addKeyboardNavigation(carousel) {
|
|
|
document.addEventListener('keydown', function(e) {
|
|
|
// 只在轮播容器可见时响应键盘事件
|
|
|
const carouselContainer = document.getElementById('professionalCarousel');
|
|
|
if (!isElementInViewport(carouselContainer)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
switch(e.key) {
|
|
|
case 'ArrowLeft':
|
|
|
e.preventDefault();
|
|
|
carousel.prev();
|
|
|
break;
|
|
|
case 'ArrowRight':
|
|
|
e.preventDefault();
|
|
|
carousel.next();
|
|
|
break;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加鼠标悬停暂停功能
|
|
|
*/
|
|
|
function addHoverPause(carousel, container) {
|
|
|
container.addEventListener('mouseenter', function() {
|
|
|
carousel.pauseAutoplay();
|
|
|
});
|
|
|
|
|
|
container.addEventListener('mouseleave', function() {
|
|
|
carousel.resumeAutoplay();
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加加载完成动画
|
|
|
*/
|
|
|
function addLoadAnimation(container) {
|
|
|
// 添加加载状态
|
|
|
container.classList.add('loading');
|
|
|
|
|
|
// 模拟加载完成
|
|
|
setTimeout(() => {
|
|
|
container.classList.remove('loading');
|
|
|
container.classList.add('loaded');
|
|
|
}, 500);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 检查元素是否在视口中
|
|
|
*/
|
|
|
function isElementInViewport(el) {
|
|
|
if (!el) return false;
|
|
|
|
|
|
const rect = el.getBoundingClientRect();
|
|
|
return (
|
|
|
rect.top >= 0 &&
|
|
|
rect.left >= 0 &&
|
|
|
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
|
|
|
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
|
|
|
);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 响应式处理
|
|
|
*/
|
|
|
function handleResponsive() {
|
|
|
const carousel = window.professionalCarousel;
|
|
|
if (!carousel) return;
|
|
|
|
|
|
const screenWidth = window.innerWidth;
|
|
|
let slidesPerView = 5;
|
|
|
|
|
|
if (screenWidth <= 480) {
|
|
|
slidesPerView = 2;
|
|
|
} else if (screenWidth <= 768) {
|
|
|
slidesPerView = 3;
|
|
|
} else if (screenWidth <= 1024) {
|
|
|
slidesPerView = 4;
|
|
|
}
|
|
|
|
|
|
// 更新轮播配置(如果SimpleCarousel支持动态更新)
|
|
|
if (carousel.updateSlidesPerView) {
|
|
|
carousel.updateSlidesPerView(slidesPerView);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 监听窗口大小变化
|
|
|
window.addEventListener('resize', debounce(handleResponsive, 250));
|
|
|
|
|
|
/**
|
|
|
* 防抖函数
|
|
|
*/
|
|
|
function debounce(func, wait) {
|
|
|
let timeout;
|
|
|
return function executedFunction(...args) {
|
|
|
const later = () => {
|
|
|
clearTimeout(timeout);
|
|
|
func(...args);
|
|
|
};
|
|
|
clearTimeout(timeout);
|
|
|
timeout = setTimeout(later, wait);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
})(); |