index.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import React, { useCallback, useEffect, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import history, { HomeDataRow, myData, myUrl } from '@/utils/history'
  4. import classNmaes from 'classnames'
  5. import { Swiper, SwiperSlide } from 'swiper/react';
  6. import 'swiper/css';
  7. import 'swiper/css/effect-coverflow';
  8. import 'swiper/css/pagination';
  9. import 'swiper/css/navigation';
  10. import { EffectCoverflow, Pagination, Navigation } from 'swiper/modules';
  11. function A3banner() {
  12. const imgArr = myData.homeData.map((item) => myUrl + item.cover)
  13. console.log(imgArr, 'imgArr')
  14. const [curIndex, setCurIndex] = useState(0)
  15. return (
  16. <div className={styles.A3banner} style={{ backgroundImage: `url(${myUrl + myData.homeBgDark})` }}>
  17. <div className="topPic"><img src={require('@/assets/img/title.png')} alt="" /></div>
  18. <Swiper
  19. effect={'coverflow'}
  20. grabCursor={true}
  21. centeredSlides={true}
  22. loop={true}
  23. slidesPerView={'auto'}
  24. coverflowEffect={{
  25. rotate: 0,
  26. stretch: 0,
  27. depth: 150,
  28. modifier: 4,
  29. }}
  30. spaceBetween={-100}
  31. pagination={{ el: '.swiper-pagination', clickable: true }}
  32. navigation={{
  33. nextEl: '.swiper-button-next',
  34. prevEl: '.swiper-button-prev',
  35. clickable: true,
  36. }}
  37. modules={[EffectCoverflow, Pagination, Navigation]}
  38. className="swiper_container"
  39. onActiveIndexChange={(swiper: any) => {
  40. if (swiper.activeIndex !== undefined) {
  41. setCurIndex(swiper.realIndex); // 使用realIndex处理loop模式下的真实索引
  42. }
  43. }}
  44. >
  45. {
  46. imgArr.map((item, index) => (
  47. <SwiperSlide key={index}>
  48. <img style={{
  49. width: '100%',
  50. height: '100%',
  51. objectFit: 'contain',
  52. }} src={item} alt="slide_image" />
  53. </SwiperSlide>
  54. ))
  55. }
  56. <div className="swiper-button-prev swiper-button-arr-custom"><img src={require('@/assets/img/left.png')} alt="" /></div>
  57. <div className="swiper-button-next swiper-button-arr-custom"><img src={require('@/assets/img/right.png')} alt="" /></div>
  58. </Swiper>
  59. <div className="contentTxt">
  60. <div className="title">{myData.homeData[curIndex].name}</div>
  61. <div className="txt">{myData.homeData[curIndex].txt}</div>
  62. </div>
  63. </div>
  64. );
  65. }
  66. const MemoA3banner = React.memo(A3banner)
  67. export default MemoA3banner