Skip to content

Commit 9641652

Browse files
huqiaolixingyuefeng
authored andcommitted
fix(imageViewer):添加自定义多张图片查看
1 parent 2a15e5f commit 9641652

File tree

3 files changed

+70
-17
lines changed

3 files changed

+70
-17
lines changed

example/examples/src/routes/ImageViewer/index.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,19 @@ export default class Index extends Component<IndexProps> {
2121
<Card title="基础使用">
2222
<ImageViewer />
2323
</Card>
24-
<Card title="自定义图片">
24+
<Card title="自定义单张图片">
25+
<ImageViewer height={100} width={100} src="https://img11.51tietu.net/pic/2016-071418/20160714181543xyu10ukncwf221991.jpg" />
26+
</Card>
27+
<Card title="自定义多张图片">
2528
<ImageViewer
2629
height={100}
2730
width={100}
28-
src="https://img11.51tietu.net/pic/2016-071418/20160714181543xyu10ukncwf221991.jpg"
31+
defaultIndex={2}
32+
src={[
33+
{url: 'https://wx3.sinaimg.cn/mw690/4718260ely1gt2cg7t5udj23dw1wkhdu.jpg'},
34+
{url: 'https://iknow-pic.cdn.bcebos.com/810a19d8bc3eb135828572d2ab1ea8d3fd1f441d'},
35+
{url: 'https://wx1.sinaimg.cn/mw690/4718260ely1gt2cg5r9zij22yo1o0x6p.jpg'},
36+
]}
2937
/>
3038
</Card>
3139
</Body>

packages/core/src/ImageViewer/README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,25 @@ export default class Index extends Component<IndexProps> {
6363
<Layout>
6464
<Header title={title} description={description} />
6565
<Body style={{ backgroundColor: '#fff' }}>
66-
<Card title="自定义图片">
66+
<Card title="自定义单张图片">
6767
<ImageViewer
6868
height={100}
6969
width={100}
7070
src="https://img11.51tietu.net/pic/2016-071418/20160714181543xyu10ukncwf221991.jpg"
7171
/>
7272
</Card>
73+
<Card title="自定义多张图片">
74+
<ImageViewer
75+
height={100}
76+
width={100}
77+
defaultIndex={2}
78+
src={[
79+
{ url: 'https://wx3.sinaimg.cn/mw690/4718260ely1gt2cg7t5udj23dw1wkhdu.jpg' },
80+
{ url: 'https://iknow-pic.cdn.bcebos.com/810a19d8bc3eb135828572d2ab1ea8d3fd1f441d' },
81+
{ url: 'https://wx1.sinaimg.cn/mw690/4718260ely1gt2cg5r9zij22yo1o0x6p.jpg' }
82+
]}
83+
/>
84+
</Card>
7385
</Body>
7486
<Footer />
7587
</Layout>

packages/core/src/ImageViewer/index.tsx

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,30 @@ import React, { useState, useMemo, useRef } from 'react';
22
import { StyleSheet, ViewProps, Dimensions, View, Image, Animated } from 'react-native';
33
import TransitionImage, { ImageProps } from '../TransitionImage';
44
import MaskLayer, { MaskLayerProps } from '../MaskLayer';
5+
import Swiper from '../Swiper';
56
import { ActivityIndicator } from 'react-native';
67
export let ImageMainWidth = Dimensions.get('window').width;
78
export let ImageMainHeight = Dimensions.get('window').height;
89

910
const defaultImage = 'https://wx3.sinaimg.cn/mw690/4718260ely1gt2cg7t5udj23dw1wkhdu.jpg';
1011

12+
export interface ImageViewerDataSourceProps {
13+
url: string;
14+
[key: string]: any;
15+
}
1116
export interface ImageViewerProps extends ViewProps {
1217
/** 图片宽度 */
1318
width?: number;
1419
/** 图片高度 */
1520
height?: number;
1621
/** 图像源(远程URL或本地文件资源 */
17-
src?: string | number;
22+
src?: string | ImageViewerDataSourceProps[];
23+
/** 默认显示第几张图片 */
24+
defaultIndex?: number;
1825
}
1926

2027
function ImageViewer(props: ImageViewerProps) {
21-
const { width = 150, height = 150, src = defaultImage, ...others } = props;
28+
const { width = 150, height = 150, src = defaultImage, defaultIndex = 0, ...others } = props;
2229
const [visible, setVisible] = useState(false);
2330
const fadeAnim = useRef(new Animated.Value(0)).current;
2431

@@ -34,22 +41,48 @@ function ImageViewer(props: ImageViewerProps) {
3441
}).start();
3542
}, [visible]);
3643

44+
const imgUrl = useMemo(() => {
45+
if (Array.isArray(src)) {
46+
return src[defaultIndex].url;
47+
}
48+
return src;
49+
}, [src]);
50+
3751
return (
3852
<View style={{}}>
39-
<TransitionImage
40-
style={{ width: width, height: height }}
41-
onPress={() => setVisible(true)}
42-
source={typeof src === 'number' ? src : { uri: src as string }}
43-
PlaceholderContent={<ActivityIndicator />}
44-
transition={true}
45-
transitionDuration={500}
46-
/>
53+
<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
54+
{Array.isArray(src) ? (
55+
src.map((item: ImageViewerDataSourceProps, index: number) => {
56+
return (
57+
<TransitionImage
58+
key={index}
59+
style={{ width: width, height: height, flex: 1 }}
60+
onPress={() => setVisible(true)}
61+
source={{ uri: item.url }}
62+
PlaceholderContent={<ActivityIndicator />}
63+
transition={true}
64+
transitionDuration={500}
65+
/>
66+
);
67+
})
68+
) : (
69+
<TransitionImage
70+
style={{ width: width, height: height }}
71+
onPress={() => setVisible(true)}
72+
source={{ uri: imgUrl }}
73+
PlaceholderContent={<ActivityIndicator />}
74+
transition={true}
75+
transitionDuration={500}
76+
/>
77+
)}
78+
</View>
4779
<MaskLayer visible={visible} onDismiss={() => setVisible(false)} opacity={0.9}>
4880
<Animated.View style={[styles.content, { opacity: fadeAnim }]}>
49-
<Image
50-
style={{ width: '100%', height: '100%', resizeMode: 'contain' }}
51-
source={typeof src === 'number' ? src : { uri: src as string }}
52-
/>
81+
{Array.isArray(src) ? (
82+
<Swiper dataSource={src} height={200} autoplay={false} />
83+
) : (
84+
<Image style={{ width: '100%', height: '100%', resizeMode: 'contain' }} source={{ uri: src }} />
85+
)}
5386
</Animated.View>
5487
</MaskLayer>
5588
</View>

0 commit comments

Comments
 (0)