TopImageSwiper.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { Swiper, SwiperSlide } from 'swiper/react';
  2. import Link from 'next/link';
  3. // import { Navigation, Pagination, Mousewheel, Keyboard } from 'swiper/modules';
  4. // 定义图片类型
  5. type BannerImageItem = {
  6. link: string;
  7. image: string;
  8. title: string;
  9. };
  10. // 组件入参
  11. interface TopImageSwiperProps {
  12. bannerImages: BannerImageItem[];
  13. }
  14. const TopImageSwiper = ({ bannerImages }: TopImageSwiperProps) => {
  15. // 兜底:没有图片不渲染,防止报错
  16. if (!bannerImages || bannerImages.length === 0) return null;
  17. // ✅ 直接在这里放你的图片数组,想加多少加多少
  18. // const images = [
  19. // 'https://cdn.asteriahair.com/uploads/202607/01/20260701165056_761989a0fdc11d5e.jpg',
  20. // 'https://cdn.asteriahair.com/uploads/202607/01/20260701165110_3fff435adf276b89.jpg',
  21. // 'https://cdn.asteriahair.com/uploads/202607/01/20260701165123_c424f6f1d0b29522.jpg',
  22. // 'https://cdn.asteriahair.com/uploads/202607/01/20260701165056_761989a0fdc11d5e.jpg',
  23. // ];
  24. return (
  25. <div className="w-full mx-auto ">
  26. <Swiper
  27. slidesPerView={1}
  28. spaceBetween={0}
  29. loop={true} // 无限轮播
  30. // pagination={{ clickable: true }}
  31. // mousewheel
  32. // keyboard={{ enabled: true }}
  33. className="h-auto md:h-[80vh] overflow-hidden"
  34. >
  35. {/* ✅ 自动遍历图片数组,一行代码搞定所有图片 */}
  36. {bannerImages .map((item, index) => (
  37. <SwiperSlide key={index}>
  38. <Link href={item.link}>
  39. <img
  40. src={item.image}
  41. alt={item.title}
  42. className="w-full h-full object-cover"
  43. />
  44. </Link>
  45. </SwiperSlide>
  46. ))}
  47. </Swiper>
  48. </div>
  49. );
  50. };
  51. export default TopImageSwiper;