1 | import { ComponentType, ImgHTMLAttributes } from 'react'
|
2 | import { StandardProps, CommonEventFunction } from './common'
|
3 | interface ImageProps extends StandardProps {
|
4 | /** 图片资源地址
|
5 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
6 | */
|
7 | src: string
|
8 | /** 图片裁剪、缩放的模式
|
9 | * @default "scaleToFill"
|
10 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
11 | * @rn 部分支持 scaleToFill, aspectFit, aspectFill, widthFix
|
12 | * @harmony 部分支持 scaleToFill, aspectFit, aspectFill, widthFix, heightFix
|
13 | */
|
14 | mode?: keyof ImageProps.Mode
|
15 | /** 默认不解析 webP 格式,只支持网络资源
|
16 | * @default false
|
17 | * @supported weapp, swan
|
18 | */
|
19 | webp?: boolean
|
20 | /** 默认不解析 svg 格式,svg 图片只支持 aspectFit
|
21 | * @default false
|
22 | * @supported rn
|
23 | */
|
24 | svg?: boolean
|
25 | /** 图片懒加载。只针对 page 与 scroll-view 下的 image 有效
|
26 | * @default false
|
27 | * @supported weapp, alipay, swan, tt, qq, h5, harmony_hybrid
|
28 | */
|
29 | lazyLoad?: boolean
|
30 | /** 开启长按图片显示识别小程序码菜单
|
31 | * @default false
|
32 | * @supported weapp
|
33 | */
|
34 | showMenuByLongpress?: boolean
|
35 | /**
|
36 | * 为 img 标签额外增加的属性
|
37 | * @supported h5, harmony_hybrid
|
38 | */
|
39 | imgProps?: ImgHTMLAttributes<HTMLImageElement>
|
40 | /** 用于透传 `WebComponents` 上的属性到内部 H5 标签上
|
41 | * @supported h5, harmony_hybrid
|
42 | */
|
43 | nativeProps?: Record<string, unknown>
|
44 | /** 默认图片地址,若设置默认图片地址,会先显示默认图片,等 src 对应的图片加载成功后,再渲染对应的图片。
|
45 | * @supported alipay
|
46 | */
|
47 | defaultSource?: string
|
48 | /** 阻止长按图片时弹起默认菜单(即将该属性设置为image-menu-prevent="true"或image-menu-prevent),只在初始化时有效,不能动态变更;若不想阻止弹起默认菜单,则不需要设置此属性。注:长按菜单后的操作暂不支持 svg 格式
|
49 | * @supported swan
|
50 | */
|
51 | imageMenuPrevent?: string
|
52 | /** 点击后是否预览图片。在不设置的情况下,若 image 未监听点击事件且宽度大于 1/4 屏宽,则默认开启
|
53 | * @supported swan
|
54 | */
|
55 | preview?: string
|
56 | /** 预览时显示的图片地址
|
57 | * @supported swan
|
58 | */
|
59 | originalSrc?: string
|
60 | /** 无障碍访问,(属性)元素的额外描述
|
61 | * @supported qq
|
62 | */
|
63 | ariaLabel?: string
|
64 | /** 是否渐显
|
65 | * @supported weapp
|
66 | * @default false
|
67 | */
|
68 | fadeIn?: boolean
|
69 | /** 当错误发生时,发布到 AppService 的事件名,事件对象
|
70 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony_hybrid
|
71 | */
|
72 | onError?: CommonEventFunction<ImageProps.onErrorEventDetail>
|
73 | /** 当图片载入完毕时,发布到 AppService 的事件名,事件对象
|
74 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony_hybrid
|
75 | */
|
76 | onLoad?: CommonEventFunction<ImageProps.onLoadEventDetail>
|
77 | /** 点击图片时触发。
|
78 | * @supported alipay
|
79 | */
|
80 | onTap?: CommonEventFunction
|
81 | /** 点击图片时触发,阻止事件冒泡。
|
82 | * @supported alipay
|
83 | */
|
84 | catchTap?: CommonEventFunction
|
85 | }
|
86 | declare namespace ImageProps {
|
87 | /** mode 的合法值 */
|
88 | interface Mode {
|
89 | /** 缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素 */
|
90 | scaleToFill
|
91 | /** 缩放模式,保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。 */
|
92 | aspectFit
|
93 | /** 缩放模式,保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。 */
|
94 | aspectFill
|
95 | /** 缩放模式,宽度不变,高度自动变化,保持原图宽高比不变 */
|
96 | widthFix
|
97 | /** 缩放模式,高度不变,宽度自动变化,保持原图宽高比不变 */
|
98 | heightFix
|
99 | /** 裁剪模式,不缩放图片,只显示图片的顶部区域 */
|
100 | top
|
101 | /** 裁剪模式,不缩放图片,只显示图片的底部区域 */
|
102 | bottom
|
103 | /** 裁剪模式,不缩放图片,只显示图片的中间区域 */
|
104 | center
|
105 | /** 裁剪模式,不缩放图片,只显示图片的左边区域 */
|
106 | left
|
107 | /** 裁剪模式,不缩放图片,只显示图片的右边区域 */
|
108 | right
|
109 | /** 裁剪模式,不缩放图片,只显示图片的左上边区域 */
|
110 | 'top left'
|
111 | /** 裁剪模式,不缩放图片,只显示图片的右上边区域 */
|
112 | 'top right'
|
113 | /** 裁剪模式,不缩放图片,只显示图片的左下边区域 */
|
114 | 'bottom left'
|
115 | /** 裁剪模式,不缩放图片,只显示图片的右下边区域 */
|
116 | 'bottom right'
|
117 | }
|
118 | interface onErrorEventDetail {
|
119 | /** 错误信息 */
|
120 | errMsg: string
|
121 | }
|
122 | interface onLoadEventDetail {
|
123 | /** 图片高度 */
|
124 | height: number | string
|
125 | /** 图片宽度 */
|
126 | width: number | string
|
127 | }
|
128 | }
|
129 | /** 图片。支持 JPG、PNG、SVG、WEBP、GIF 等格式以及云文件ID。
|
130 | *
|
131 | * **Note:** 为实现小程序的 `mode` 特性,在 H5 组件中使用一个 `div` 容器来对内部的 `img` 进行展示区域的裁剪,因此请勿使用元素选择器来重置 `img` 的样式!
|
132 | * @classification media
|
133 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
134 | * @example_react
|
135 | * ```tsx
|
136 | * export default class PageView extends Component {
|
137 | * constructor() {
|
138 | * super(...arguments)
|
139 | * }
|
140 | *
|
141 | * render() {
|
142 | * return (
|
143 | * <View className='components-page'>
|
144 | * <Image
|
145 | * style='width: 300px;height: 100px;background: #fff;'
|
146 | * src='nerv_logo.png'
|
147 | * />
|
148 | * <Image
|
149 | * style='width: 300px;height: 100px;background: #fff;'
|
150 | * src='https://camo.githubusercontent.com/3e1b76e514b895760055987f164ce6c95935a3aa/687474703a2f2f73746f726167652e333630627579696d672e636f6d2f6d74642f686f6d652f6c6f676f2d3278313531333833373932363730372e706e67'
|
151 | * />
|
152 | * </View>
|
153 | * )
|
154 | * }
|
155 | * }
|
156 | * ```
|
157 | * @example_vue
|
158 | * ```html
|
159 | * <template>
|
160 | * <view class="components-page">
|
161 | * <image
|
162 | * style="width: 300px;height: 100px;background: #fff;"
|
163 | * src="nerv_logo.png"
|
164 | * />
|
165 | * <image
|
166 | * style="width: 300px;height: 100px;background: #fff;"
|
167 | * src="https://camo.githubusercontent.com/3e1b76e514b895760055987f164ce6c95935a3aa/687474703a2f2f73746f726167652e333630627579696d672e636f6d2f6d74642f686f6d652f6c6f676f2d3278313531333833373932363730372e706e67"
|
168 | * />
|
169 | * </view>
|
170 | * </template>
|
171 | * ```
|
172 | * @see https://developers.weixin.qq.com/miniprogram/dev/component/image.html
|
173 | */
|
174 | declare const Image: ComponentType<ImageProps>
|
175 | export { Image, ImageProps }
|