import { Image, Swiper, SwiperItem, View, Text, Video, } from '@tarojs/components'; import React, { Fragment, useState } from 'react'; import className from 'classnames'; const playIcon = 'https://wanmi-b2b.oss-cn-shanghai.aliyuncs.com/pandora-ui/assets/components/images/image-slider/icon-play.png'; const closeIcon = 'https://wanmi-b2b.oss-cn-shanghai.aliyuncs.com/pandora-ui/assets/components/images/image-slider/icon-close.png'; const noImg = 'https://wanmi-b2b.oss-cn-shanghai.aliyuncs.com/pandora-ui/assets/components/images/image-slider/icon-no-img.png'; interface ImageSliderProps { /** 图片列表 */ slideImages: string[]; /** 类型 */ type?: 'normal' | 'flat'; /** 视频地址 */ videoUrl?: string; /** 点击回调 **/ onClick?: (index: number) => void; } /** * 轮播图组件 */ const ImageSlider: React.FC = ({ slideImages = [], type = 'normal', videoUrl = '', onClick = (_index: number) => {}, }) => { const [num, setNum] = useState(0); const [showVideo, setShowVideo] = useState(false); const swiperBox = className( 'swiper-box', type === 'flat' && 'swiper-box-flat', ); const renderVideo = () => { return ( !(showVideo || type === 'flat') && ( {!!videoUrl && ( { setShowVideo(true); }}> )} {num + 1} /{slideImages.length ? slideImages.length : 1} ) ); }; return ( {showVideo ? ( setShowVideo(false)} /> ) : slideImages?.length > 0 ? ( setNum(e.detail.current)} onClick={() => onClick(num)} className={swiperBox} // circular 此处注释是为了解决商品详情页 swiper组件开启衔接滑动导致dom频繁更新调用oss图片接口 > {slideImages.map((image, index) => ( ))} {renderVideo()} ) : ( {renderVideo()} )} ); }; export default ImageSlider;