UNPKG

6.77 kBTypeScriptView Raw
1import { ComponentType, ImgHTMLAttributes } from 'react'
2import { StandardProps, CommonEventFunction } from './common'
3interface 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}
86declare 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 */
174declare const Image: ComponentType<ImageProps>
175export { Image, ImageProps }