属性详解
| 属性 | 类型 | 默认值 | 作用 |
|---|---|---|---|
| src | String | - | 图片地址(必填) |
| mode | String | scaleToFill | 图片缩放/裁剪模式(16种) |
| lazy-load | Boolean | false | 滚动到视口才加载(懒加载优化) |
| show-menu-by-longpress | Boolean | false | 长按弹出保存/识别菜单 |
| bindload | Event | - | 图片加载成功触发 |
| binderror | Event | - | 图片加载失败触发 |
| bindtap | Event | - | 点击图片事件 |
mode 16种显示模式(最常用5种重点)
容器固定宽高时,控制图片适配逻辑:
1. scaleToFill(默认)
不保持比例,拉伸填满容器,图片会变形
适用:纯色背景占位图
2. aspectFit(最常用预览)
保持比例,完整显示整张图,长边贴合容器,会留白
适用:商品详情、图片预览
3. aspectFill(头像/封面首选)
保持比例,短边填满容器,超出部分裁剪,无留白不变形
适用:头像、轮播封面、商品列表图
4. widthFix(自适应宽度)
宽度等于容器宽度,高度自动等比例缩放,无需手动设height
<image src="xxx.jpg" mode="widthFix" style="width:100%;"></image>
适用:图文详情、信息流大图
5. heightFix
高度等于容器高度,宽度自适应
其余裁剪定位模式(按需使用)
top/center/bottom/left/right/top left/top right/bottom left/bottom right
作用:等比例放大填满容器,按对应方位裁剪多余部分
事件监听:加载成功/失败
WXML
<image
src="{{imgUrl}}"
style="width:300rpx;height:300rpx"
bindload="onImgLoad"
binderror="onImgError"
>
</image>
JS
Page({
data: { imgUrl: "https://xxx/test.jpg" },
// 加载成功
onImgLoad(e) {
console.log("图片宽高", e.detail.width, e.detail.height)
},
// 加载失败(404/域名错误)
onImgError(e) {
console.log("加载失败", e.detail.errMsg)
// 替换默认兜底图
this.setData({ imgUrl: "/images/default.png" })
}
})
实用高级功能
1. 懒加载 lazy-load
页面长列表大量图片时开启,不在屏幕内不请求,优化性能
<image src="{{list.img}}" lazy-load="true"></image>
2. 长按保存/识别小程序码
<image src="/ewm.png" show-menu-by-longpress="true"></image>
3. 圆形头像(圆角)
<image
src="{{avatar}}"
mode="aspectFill"
style="width:120rpx;height:120rpx;border-radius:50%;"
></image>
4. 轮播图搭配 image
<swiper style="width:100%;height:400rpx" autoplay circular>
<swiper-item>
<image src="img1.jpg" mode="aspectFill" style="width:100%;height:100%"></image>
</swiper-item>
<swiper-item>
<image src="img2.jpg" mode="aspectFill" style="width:100%;height:100%"></image>
</swiper-item>
</swiper>
5. 图片点击预览(wx.previewImage)
<image src="{{img}}" bindtap="previewImg"></image>
previewImg() {
wx.previewImage({
current: this.data.img, // 当前预览图
urls: [this.data.img] // 图片数组,支持多图滑动
})
}
常见踩坑与解决方案
图片空白不显示
- 没设置宽高:必须加
style="width:xx;height:xx" - 网络图域名未添加到后台 request 合法域名
- 路径写错:本地图用绝对路径
/images/xxx
- 没设置宽高:必须加
图片拉伸变形
- 头像/封面改用
mode="aspectFill" - 详情大图改用
mode="widthFix"
- 头像/封面改用
本地背景图不生效
WXSSbackground-image:url(本地图)不支持,改用 image 组件模拟背景。长列表页面卡顿
全部添加lazy-load="true",图片压缩到 200kb 以内。真机无法长按保存
加上show-menu-by-longpress="true"。
性能优化建议
- 图片压缩:线上图控制在 200kb 以内,优先 WebP;
- 列表开启懒加载
lazy-load; - 列表图片统一尺寸,避免频繁重绘;
- 失败统一兜底默认图,提升体验;
- 首屏大图可在 onShow 预加载。