Skip to content

Commit 4ae42ec

Browse files
committed
feat(image-viewer): add image-viewer
1 parent d9ce8c7 commit 4ae42ec

File tree

19 files changed

+707
-68
lines changed

19 files changed

+707
-68
lines changed

site/mobile/mobile.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ export default {
4040
name: 'image',
4141
component: () => import('tdesign-mobile-react/image/_example/index.tsx'),
4242
},
43+
{
44+
title: 'ImageViewer 图片预览',
45+
name: 'image-viewer',
46+
component: () => import('tdesign-mobile-react/image-viewer/_example/index.tsx'),
47+
},
4348
{
4449
title: 'Overlay 遮罩层',
4550
name: 'overlay',

site/web/site.config.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -382,12 +382,14 @@ export const docs = [
382382
component: () => import('tdesign-mobile-react/image/image.md'),
383383
componentEn: () => import('tdesign-mobile-react/image/image.en-US.md'),
384384
},
385-
// {
386-
// title: 'ImageViewer 图片预览',
387-
// name: 'image-viewer',
388-
// path: '/mobile-react/components/image-viewer',
389-
// component: () => import('tdesign-mobile-react/image-viewer/image-viewer.md'),
390-
// },
385+
{
386+
title: 'ImageViewer 图片预览',
387+
titleEn: 'ImageViewer',
388+
name: 'ImageViewer',
389+
path: '/mobile-react/components/image-viewer',
390+
component: () => import('tdesign-mobile-react/image-viewer/image-viewer.md'),
391+
componentEn: () => import('tdesign-mobile-react/image-viewer/image-viewer.en-US.md'),
392+
},
391393
// {
392394
// title: 'List 列表',
393395
// name: 'list',
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import React, { useState } from 'react';
2+
import { ImageViewer, Button, type ImageInfo } from 'tdesign-mobile-react';
3+
4+
const images: ImageInfo[] = [
5+
{
6+
url: 'https://tdesign.gtimg.com/mobile/demos/swiper1.png',
7+
align: 'start',
8+
},
9+
{
10+
url: 'https://tdesign.gtimg.com/mobile/demos/swiper2.png',
11+
align: 'end',
12+
},
13+
{
14+
url: 'https://tdesign.gtimg.com/mobile/demos/swiper2.png',
15+
align: 'center',
16+
},
17+
];
18+
19+
export default function AlignDemo() {
20+
const [visible, setVisible] = useState(false);
21+
22+
return (
23+
<div className="image-example">
24+
<Button block size="large" variant="outline" theme="primary" onClick={() => setVisible(true)}>
25+
基础图片预览 + 对齐方式
26+
</Button>
27+
28+
<ImageViewer images={images} visible={visible} onClose={() => setVisible(false)} />
29+
</div>
30+
);
31+
}

src/image-viewer/_example/base.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React, { useState } from 'react';
2+
import { ImageViewer, Button } from 'tdesign-mobile-react';
3+
4+
const images = [
5+
'https://tdesign.gtimg.com/mobile/demos/swiper1.png',
6+
'https://tdesign.gtimg.com/mobile/demos/swiper2.png',
7+
];
8+
9+
export default function BaseDemo() {
10+
const [visible, setVisible] = useState(false);
11+
12+
return (
13+
<div className="image-example">
14+
<Button block size="large" variant="outline" theme="primary" onClick={() => setVisible(true)}>
15+
基础图片预览
16+
</Button>
17+
18+
<ImageViewer images={images} visible={visible} onClose={() => setVisible(false)} />
19+
</div>
20+
);
21+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React from 'react';
2+
import TDemoBlock from '../../../site/mobile/components/DemoBlock';
3+
import TDemoHeader from '../../../site/mobile/components/DemoHeader';
4+
import BaseDemo from './base';
5+
import AlignDemo from './align';
6+
import OperationDemo from './operation';
7+
import './style/index.less';
8+
9+
export default function ImageViewerDemo() {
10+
return (
11+
<div className="tdesign-mobile-demo">
12+
<TDemoHeader
13+
title="ImageViewer 图片预览"
14+
summary="图片全屏放大预览效果,包含全屏背景色、页码位置样式、增加操作等规范"
15+
/>
16+
<TDemoBlock title="01 组件类型" summary="图片预览类型" padding={true}>
17+
<BaseDemo />
18+
</TDemoBlock>
19+
<TDemoBlock title="02 组件类型" summary="图片预览类型,可设置垂直对齐方式" padding={true}>
20+
<AlignDemo />
21+
</TDemoBlock>
22+
<TDemoBlock title="03 组件类型" summary="带操作图片预览" padding={true}>
23+
<OperationDemo />
24+
</TDemoBlock>
25+
</div>
26+
);
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React, { useState } from 'react';
2+
import { ImageViewer, Button } from 'tdesign-mobile-react';
3+
4+
const images = [
5+
'https://tdesign.gtimg.com/mobile/demos/swiper1.png',
6+
'https://tdesign.gtimg.com/mobile/demos/swiper2.png',
7+
];
8+
9+
export default function OperationDemo() {
10+
const [visible, setVisible] = useState(false);
11+
12+
return (
13+
<div className="image-example">
14+
<Button block size="large" variant="outline" theme="primary" onClick={() => setVisible(true)}>
15+
带操作图片预览
16+
</Button>
17+
18+
<ImageViewer
19+
images={images}
20+
visible={visible}
21+
showIndex={true}
22+
deleteBtn={true}
23+
onClose={() => setVisible(false)}
24+
/>
25+
</div>
26+
);
27+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.tdesign-mobile-demo {
2+
background-color: #fff;
3+
min-height: 100%;
4+
}

src/image-viewer/defaultProps.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* 该文件为脚本自动生成文件,请勿随意修改。如需修改请联系 PMC
3+
* */
4+
5+
import { TdImageViewerProps } from './type';
6+
7+
export const imageViewerDefaultProps: TdImageViewerProps = {
8+
closeBtn: true,
9+
deleteBtn: false,
10+
images: [],
11+
defaultIndex: 0,
12+
maxZoom: 3,
13+
showIndex: false,
14+
defaultVisible: false,
15+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
:: BASE_DOC ::
2+
3+
## API
4+
5+
### ImageViewer Props
6+
7+
name | type | default | description | required
8+
-- | -- | -- | -- | --
9+
className | String | - | className of component | N
10+
style | Object | - | CSS(Cascading Style Sheets),Typescript:`React.CSSProperties` | N
11+
closeBtn | TNode | true | Typescript:`boolean \| TNode`[see more ts definition](https://github.com/Tencent/tdesign-mobile-react/blob/develop/src/common.ts) | N
12+
deleteBtn | TNode | false | Typescript:`boolean \| TNode`[see more ts definition](https://github.com/Tencent/tdesign-mobile-react/blob/develop/src/common.ts) | N
13+
images | Array | [] | Typescript:`Array<string \| ImageInfo>` `interface ImageInfo { url: string; align: 'start' \| 'center' \| 'end' }`[see more ts definition](https://github.com/Tencent/tdesign-mobile-react/tree/develop/src/image-viewer/type.ts) | N
14+
index | Number | 0 | \- | N
15+
defaultIndex | Number | 0 | uncontrolled property | N
16+
index | Number | - | \- | N
17+
defaultIndex | Number | - | uncontrolled property | N
18+
maxZoom | Number | 3 | Typescript:`number` | N
19+
showIndex | Boolean | false | \- | N
20+
visible | Boolean | false | hide or show image viewer | N
21+
defaultVisible | Boolean | false | hide or show image viewer。uncontrolled property | N
22+
onClose | Function | | Typescript:`(context: { trigger: 'overlay' \| 'close-btn', visible: boolean, index: number }) => void`<br/> | N
23+
onDelete | Function | | Typescript:`(index: number) => void`<br/> | N
24+
onIndexChange | Function | | Typescript:`(index: number, context: { trigger: 'prev' \| 'next' \| 'current' }) => void`<br/> | N
25+
onIndexChange | Function | | Typescript:`(index: number, context: { trigger: 'prev' \| 'next' }) => void`<br/> | N

src/image-viewer/image-viewer.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
:: BASE_DOC ::
2+
3+
## API
4+
5+
### ImageViewer Props
6+
7+
名称 | 类型 | 默认值 | 描述 | 必传
8+
-- | -- | -- | -- | --
9+
className | String | - | 类名 | N
10+
style | Object | - | 样式,TS 类型:`React.CSSProperties` | N
11+
closeBtn | TNode | true | 是否展示关闭按钮,值为 `true` 显示默认关闭按钮;值为 `false` 则不显示关闭按钮;也可以完全自定义关闭按钮。TS 类型:`boolean \| TNode`[通用类型定义](https://github.com/Tencent/tdesign-mobile-react/blob/develop/src/common.ts) | N
12+
deleteBtn | TNode | false | 是否显示删除操作,前提需要开启页码。TS 类型:`boolean \| TNode`[通用类型定义](https://github.com/Tencent/tdesign-mobile-react/blob/develop/src/common.ts) | N
13+
images | Array | [] | 图片数组。TS 类型:`Array<string \| ImageInfo>` `interface ImageInfo { url: string; align: 'start' \| 'center' \| 'end' }`[详细类型定义](https://github.com/Tencent/tdesign-mobile-react/tree/develop/src/image-viewer/type.ts) | N
14+
index | Number | 0 | 当前预览图片所在的下标 | N
15+
defaultIndex | Number | 0 | 当前预览图片所在的下标。非受控属性 | N
16+
index | Number | - | 当前预览图片所在的下标 | N
17+
defaultIndex | Number | - | 当前预览图片所在的下标。非受控属性 | N
18+
maxZoom | Number | 3 | 【开发中】最大放大比例。TS 类型:`number` | N
19+
showIndex | Boolean | false | 是否显示页码 | N
20+
visible | Boolean | false | 隐藏/显示预览 | N
21+
defaultVisible | Boolean | false | 隐藏/显示预览。非受控属性 | N
22+
onClose | Function | | TS 类型:`(context: { trigger: 'overlay' \| 'close-btn', visible: boolean, index: number }) => void`<br/>关闭时触发 | N
23+
onDelete | Function | | TS 类型:`(index: number) => void`<br/>点击删除操作按钮时触发 | N
24+
onIndexChange | Function | | TS 类型:`(index: number, context: { trigger: 'prev' \| 'next' \| 'current' }) => void`<br/>预览图片切换时触发,`context.prev` 切换到上一张图片,`context.next` 切换到下一张图片 | N
25+
onIndexChange | Function | | TS 类型:`(index: number, context: { trigger: 'prev' \| 'next' }) => void`<br/>预览图片切换时触发,`context.prev` 切换到上一张图片,`context.next` 切换到下一张图片 | N

0 commit comments

Comments
 (0)