Skip to content
在新窗口打开实时预览

Image 图片 ​

封装 uni-app image,提供加载、失败、淡入、圆角、圆形、WebP、长按菜单和图片预览能力。src 变化时会自动重置状态。

平台兼容性 ​

H5App微信小程序支付宝小程序
√√√√

基础用法 ​

vue
<snake-image
    src="/static/logo.png"
    alt="Snake UI 标志"
    width="100%"
    height="320rpx"
    mode="aspectFill"
    :radius="16"
    preview
/>
<snake-image src="/static/avatar.png" alt="用户头像" width="120rpx" height="120rpx" shape="circle" />

加载状态 ​

加载中 ​

默认显示加载图标。简单的品牌占位图可使用 loading-img;需要组合动画、文字或骨架屏时使用 loading 插槽。

vue
<snake-image src="/static/product.png" width="100%" height="220rpx" loading-img="/static/image-loading.png" />

<snake-image src="/static/product.png" width="100%" height="220rpx">
  <template #loading>
    <snake-loading size="24" />
  </template>
</snake-image>

传入 show-loading="false" 可隐藏加载反馈。

加载失败 ​

默认显示错误图标与提示。简单错误图使用 error-img;需要自定义内容时使用 error 插槽。

vue
<snake-image src="/static/not-found.png" width="100%" height="220rpx" error-img="/static/image-error.png" />

<snake-image src="/static/not-found.png" width="100%" height="220rpx">
  <template #error>
    <view class="image-error">图片暂时无法显示</view>
  </template>
</snake-image>

传入 show-error="false" 可隐藏失败反馈。两个状态的渲染优先级均为:同名插槽 > loading-img / error-img > 默认图标。

视口懒加载 ​

lazy-load 使用 uni.createIntersectionObserver,仅在进入视口预加载距离后创建真实图片请求。组件不会同时启用原生 image 的 lazy-load,避免两套懒加载调度相互影响。loadingImg 与 errorImg 在组件内部按状态直接渲染,未配置时才回退为默认图标;需要复杂状态内容时使用同名插槽,插槽优先。

vue
<snake-image
    src="/static/product.png"
    lazy-load
    :lazy-threshold="160"
    loading-img="/static/image-loading.png"
    error-img="/static/image-error.png"
/>

lazy-threshold 默认为 100;数值越大,图片会在距视口更远的位置开始请求。

展示样式 ​

填充模式 ​

通过 mode 控制图片在容器内的裁剪和对齐方式,常用商品图使用 aspectFill,完整展示图片使用 aspectFit。

vue
<snake-image src="/static/product.png" width="200rpx" height="200rpx" mode="aspectFill" />
<snake-image src="/static/product.png" width="200rpx" height="200rpx" mode="aspectFit" />

圆形与圆角 ​

vue
<snake-image src="/static/avatar.png" width="120rpx" height="120rpx" shape="circle" />
<snake-image src="/static/product.png" width="240rpx" height="180rpx" :radius="16" />

图片预览 ​

传入 preview 后,点击图片会调用 uni.previewImage。使用 preview-urls 可提供预览图集合;集合应包含当前 src。

vue
<snake-image
    src="/static/product-1.png"
    width="240rpx"
    height="240rpx"
    preview
    :preview-urls="['/static/product-1.png', '/static/product-2.png']"
/>

API ​

Props ​

参数说明类型默认值
src / mode图片地址和裁剪方式string'' / scaleToFill
alt图片的可访问文本string''
width / height容器尺寸string | number100% / auto
shape / radius形状和圆角square|circle / string|numbersquare / 0
lazyLoad / lazyThreshold视口懒加载及预加载距离boolean / numberfalse / 100
webp使用 WebPbooleanfalse
showMenuByLongpress长按显示识别菜单booleanfalse
fade / duration淡入及其时长boolean / numbertrue / 300
showLoading / loadingIcon / loadingImg加载反馈与图片占位boolean / string / stringtrue / '' / ''
showError / errorIcon / errorImg失败反馈与图片回退boolean / string / stringtrue / image / ''
preview / previewUrls点击预览及图片集合boolean / string[]false
bgColor / customClass / customStyle背景和自定义样式多类型主题默认值

Events ​

事件名触发时机参数
load图片加载成功event
error图片加载失败event
click点击图片event

Methods ​

方法名说明参数
reload按当前 src 和懒加载策略重新请求图片-

Slots ​

插槽名说明
loading自定义加载状态
error自定义加载失败状态

主题变量 ​

变量名说明
--snake-color-surface-muted图片容器默认背景色
--snake-color-text-muted状态图标默认颜色
--snake-image-status-color加载状态文字与图标颜色
--snake-image-error-color加载失败状态文字与图标颜色

为 uni-app 商城与 CMS 场景设计