Skip to content

Commit cfd9ea3

Browse files
huqiaoliff
authored andcommitted
fix(swiper):修改点击设置初始位置
1 parent 77f9268 commit cfd9ea3

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

packages/core/src/ImageViewer/index.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,12 @@ export interface ImageViewerProps extends ViewProps {
2020
height?: number;
2121
/** 图像源(远程URL或本地文件资源 */
2222
src?: string | ImageViewerDataSourceProps[];
23-
/** 默认显示第几张图片 */
24-
defaultIndex?: number;
2523
}
2624

2725
function ImageViewer(props: ImageViewerProps) {
28-
const { width = 150, height = 150, src = defaultImage, defaultIndex = 0, ...others } = props;
26+
const { width = 150, height = 150, src = defaultImage, ...others } = props;
2927
const [visible, setVisible] = useState(false);
28+
const [index, setIndex] = useState<number>(0);
3029
const fadeAnim = useRef(new Animated.Value(0)).current;
3130

3231
useMemo(() => {
@@ -43,11 +42,16 @@ function ImageViewer(props: ImageViewerProps) {
4342

4443
const imgUrl = useMemo(() => {
4544
if (Array.isArray(src)) {
46-
return src[defaultIndex].url;
45+
return src[0].url;
4746
}
4847
return src;
4948
}, [src]);
5049

50+
const onImgClick = (index: number) => {
51+
setIndex(index);
52+
setVisible(true);
53+
};
54+
5155
return (
5256
<View style={{}}>
5357
<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
@@ -57,7 +61,7 @@ function ImageViewer(props: ImageViewerProps) {
5761
<TransitionImage
5862
key={index}
5963
style={{ width: width, height: height, flex: 1 }}
60-
onPress={() => setVisible(true)}
64+
onPress={() => onImgClick(index)}
6165
source={{ uri: item.url }}
6266
PlaceholderContent={<ActivityIndicator />}
6367
transition={true}
@@ -79,7 +83,7 @@ function ImageViewer(props: ImageViewerProps) {
7983
<MaskLayer visible={visible} onDismiss={() => setVisible(false)} opacity={0.9}>
8084
<Animated.View style={[styles.content, { opacity: fadeAnim }]}>
8185
{Array.isArray(src) ? (
82-
<Swiper dataSource={src} height={200} autoplay={false} />
86+
<Swiper dataSource={src} height={200} autoplay={false} index={index} />
8387
) : (
8488
<Image style={{ width: '100%', height: '100%', resizeMode: 'contain' }} source={{ uri: src }} />
8589
)}

packages/core/src/Swiper/index.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ export interface SwiperProps {
3131
autoplay?: boolean;
3232
// 指示点样式 dot: 圆点 block: 方块
3333
dotStyle?: dotType;
34+
// 初始位置
35+
index?: number;
3436
loading?: boolean;
3537
}
3638
const Swiper = (porps: SwiperProps) => {
@@ -44,11 +46,21 @@ const Swiper = (porps: SwiperProps) => {
4446
borderRadius = 0,
4547
dotStyle = 'dot',
4648
loading = false,
49+
index = 0,
4750
} = porps;
48-
let [curIndex, setCurIndex] = useState(0);
51+
let [curIndex, setCurIndex] = useState(index);
4952
let timer = useRef<NodeJS.Timeout | undefined>();
5053
const scrollToRef: any = useRef();
5154

55+
useEffect(() => {
56+
if (scrollToRef && scrollToRef.current && index !== 0) {
57+
setTimeout(() => {
58+
onClickDot(index);
59+
scrollToRef.current.scrollTo({ x: width * index, y: 0, animated: true });
60+
}, 0);
61+
}
62+
}, [scrollToRef, index]);
63+
5264
// 自动播放
5365
const autoPlay = useCallback(() => {
5466
clearInterval(timer.current as unknown as number);

0 commit comments

Comments
 (0)