TopImageSwiper.tsx 1.7 KB

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