image
image
图片组件用于显示图片元素,默认居中对齐。 image
组件默认是行内元素。
属性
src
设置图片的 URI,对于应用包内的资产图片,支持相对路径和绝对路径。image
组件支持 PNG 和 JPEG 通用图片格式。
提示
image
组件只支持本地的图片资源,而不像 Web 的 img
元素可以直接显示网络图片资源。详情请参考如何在 Glyphix 中显示网络图片。
noCache
设置图片是否要进行缓存,默认情况下会使用缓存以优化图片加载速度。在开启 noCache
属性时 image
组件不会使用缓存,此时更改 src
属性后总是会从文件中重新加载图片。
图片缓存是一种优化加载速度并减少内存占用的技术,当系统中已经加载了相同 URI 的图片时,开启缓存的 image
组件会直接使用该资源。但是从网络中下载的名称固定、内容可能变动的图片文件(如用户头像的 internal://cache/avatar.png
)通常需要开启 noCache
属性才能保证行为正确。
即便开启了 noCache
属性,image
组件依然不会检测图片文件内容的更新,此时需要手动更改 src
属性。考虑到响应式框架会过滤相同的赋值操作,你必须使用这样的技巧:
<!-- 假设这是需要更新显示的图片,no-cache 属性是必须的。 -->
<image :src="avatarImage" no-cache />
const avatarImage = 'internal://cache/avatar.png' // 假设这是从网上下载的图片
export default {
data: {
avatarImage: avatarImage
},
// 在头像下载完成后调用这个方法以更新界面
onAvatarDownloaded() {
this.avatarImage = null // 必须先赋一个新的值
this.avatarImage = avatarImage // 重新赋值为正确的 URI
}
}
在上面的示例中,响应式属性 this.avatarImage
首先被更改为 null
,然后再重新赋值,这样值会发生变化,从而绕过响应式框架的优化机制,并实现图片更新。
注意
必须使用此技巧更新固定 URI 的资源,否则显示内容可能不会变化。保险起见,如果从网络中获取的资源路径可能重复,那么也需要使用此技巧确保界面更新。
此外,必须等待图片下载或者文件写入完成后才能更新 image
组件的 src
属性,否则也无法正常更新界面。
async
使用异步的方式加载图片资源。这种模式可以保证图片加载不会阻塞 UI 线程,提升界面的流畅性。但是相比于默认的同步加载模式,异步加载中的图片不会显示实际内容,因此不适用于所有界面。
异步加载模式适用于从网络中下载的图片。与应用打包时会自动优化的图片资产不同,网络图片通常是 PNG 或者 JPEG 这类解码缓慢的通用格式。同步解码网络图片会非常卡顿,而且这类场景中通常不需要立即显示图片。
async
可以和 noCache
属性一起使用,因为后者也主要用于网络图片:
<image :src="avatarImage" no-cache async />
继承的属性
这些属性继承自原生组件的通用属性,但是 image
组件对这些属性做了特殊处理。
opacity
设置图片的透明度,取值范围为 ,其中 表示完全透明, 表示完全不透明,默认值为 。
transform
设置图片的变换效果,等效于 CSS 的 transform
属性。
CSS 说明
不支持的通用属性
相比于其他原生组件,image
比较特殊,它不支持 background-color
、border
等通用属性。这一点和 Web 标准也是非常不同的。具体而言,以下 CSS 属性不受支持:
这意味着不能通过设置 CSS 属性为 image
组件添加背景颜色或图片,也不能为其设置边框样式。不过 image
组件是支持 border-radius
属性的。
特殊属性
image
组件支持其他可用于非容器组件的 CSS 属性,但是有几个属性可用于实现特殊的效果。
transform
设置图片的变换,该 CSS 属性用于 image
时和其他元素的 transform
效果类似,但是不需要设置 transparent
属性也可以正常显示。
opacity
设置图片的透明度,和 opacity
属性效果一样。
border-radius
设置图片的圆角半径,可以使用此属性为图片添加圆角,使用方法和通用的 border-radius
相同。image
组件总是会将圆角应用到图片的四个角上,无论图片的长宽比和 image
组件本身的长宽比是否一致。
object-fit
见 object-fit
CSS 属性。
使用技巧
显示网络图片
头像类场景
本节演示一种需要从网络上加载图片的方法,该方法主要用于用户头像等场合,即图片在本地有固定的存储位置,但是内容可能会变化。由于 Glyphix 运行时的缓存策略,你需要使用本示例中的技巧来确保显示内容更新。
<template>
<image :src="avatar" no-cache />
</template>
import request from '@system.request'
export default {
data: {
avatar: null
},
onInit() {
this.downloadAvatar()
},
async downloadAvatar() {
const saveFile = 'internal://files/avatar.png'
await request.download({
url: 'https://example.com/url/to/avatar.png',
filename: saveFile,
}).complete
// 此处技巧详见 noCache 属性的说明
this.avatar = null
this.avatar = saveFile
}
}