Skip to content

Image 图片 ​

uvx-image 提供图片常用增强能力:加载与失败占位、形状圆角、宽高自适应、原生懒加载与微信端观察器懒加载。

平台兼容性 ​

AndroidiOS鸿蒙H5微信
3.9+4.11+4.61+4.0+4.41+

小程序端仅支持微信。

平台能力 ​

能力AndroidiOS鸿蒙H5微信
基础显示、形状、圆角、裁剪模式√√√√√
加载与失败占位、loading/error 插槽√√√√√
fade 入场淡入√√√√√
lazy-load 原生懒加载3.9+(默认开启且不可关闭)4.11+×√√
observe-lazy-load 观察器懒加载××××√
show-menu-by-longpress 长按识别小程序码××××√
webp 网络图片 WebP 解码××××√

使用须知

  1. width、height 数值默认单位 px。mode="widthFix" 时高度由图片比例决定,mode="heightFix" 时宽度由图片比例决定;自适应加载完成前,传入的对应边尺寸作为占位最小尺寸,避免布局塌陷。
  2. 加载与失败占位默认显示 loading-icon、error-icon 图标,取值见 uvx-icon,也支持图片地址;可通过 loading、error 插槽完全自定义,bg-color 设置占位背景色,默认跟随主题容器色。
  3. observe-lazy-load 仅微信小程序生效,基于 uni.createIntersectionObserver,图片接近视口(底部预留 50px)才开始加载;Web、App 端开启后直接进入原生加载流程。原生 lazy-load 只在 page 与 scroll-view 内有效。
  4. show-menu-by-longpress、webp 仅微信小程序有效;Android 平台原生懒加载默认开启且不支持关闭。

基础用法 ​

通过 src 设置图片地址,加载期间显示占位图标,点击图片区域触发 click 事件。

vue
<template>
   <uvx-image
      :show-loading="true"
      :src="src"
      width="80px"
      height="80px"
      @click="handleClick"
   ></uvx-image>
</template>

<script lang="uts" setup>
const src: string = "https://example.com/image.jpg";

/**
 * 图片点击
 * @returns null
 */
const handleClick = (): void => {
   console.log("点击了图片");
};
</script>

自定义形状 ​

shape 设置图片形状,默认 square 方形,circle 渲染为圆形。

vue
<template>
   <uvx-image shape="circle" src="https://example.com/image.jpg" width="80px" height="80px"></uvx-image>
</template>

自定义圆角 ​

radius 设置圆角大小,数值默认单位 px,设置后占位与图片同步裁剪出圆角。

vue
<template>
<uvx-image radius="4" src="https://example.com/image.jpg" width="80px" height="80px"></uvx-image>
</template>

图片模式 ​

mode 为原生图片裁剪模式,默认 aspectFill;widthFix 宽度不变、高度随图片比例自适应。

vue
<template>
   <uvx-image src="https://example.com/image.jpg" width="80px" height="80px" mode="widthFix"></uvx-image>
</template>

自定义加载插槽 ​

loading 插槽在图片加载期间渲染自定义占位内容,示例中将默认图标替换为红色加载图标。

vue
<template>
   <uvx-image src="https://example.com/image.jpg" width="80px" height="80px" mode="widthFix">
      <template v-slot:loading>
         <uvx-loading-icon color="red"></uvx-loading-icon>
      </template>
   </uvx-image>
</template>

观察器懒加载 ​

开启 observe-lazy-load 后(仅微信小程序),图片滑动到可视范围才发起加载,加载前显示占位内容。

vue
<template>
   <uvx-image
      src="https://images.xxapi.cn/images/jk/image_448_7033a4a8.jpg"
      width="80px"
      height="80px"
      mode="widthFix"
      :observe-lazy-load="true"
   >
      <template v-slot:loading>
         <uvx-loading-icon color="red"></uvx-loading-icon>
      </template>
   </uvx-image>
</template>

API ​

Props ​

属性说明类型默认值平台
src图片地址string""全部
mode原生图片裁剪模式,位置模式使用 top left 等带空格值scaleToFill | aspectFit | aspectFill | widthFix | heightFix | top | bottom | center | left | right | top left | top right | bottom left | bottom rightaspectFill全部
width图片宽度,数值默认单位 px;heightFix 时由图片比例决定string | number300全部
height图片高度,数值默认单位 px;widthFix 时由图片比例决定string | number225全部
shape图片形状square | circlesquare全部
radius圆角,数值默认单位 pxstring | number0全部
lazy-load原生图片懒加载,支持范围随平台变化booleantrue全部
observe-lazy-load观察器懒加载booleanfalse微信
show-menu-by-longpress长按图片显示识别小程序码菜单booleantrue微信
loading-icon加载占位图标名称或图片地址,取值见 uvx-iconstringphoto全部
error-icon失败占位图标名称或图片地址,取值见 uvx-iconstringerror-circle全部
show-loading是否显示加载占位booleantrue全部
show-error是否显示失败占位booleantrue全部
fade是否启用组件入场淡入效果booleantrue全部
duration入场淡入时长,单位 ms,fade 为 false 时不生效number500全部
bg-color加载与失败占位背景色,默认跟随主题容器色string""全部
webp微信小程序网络图片是否默认解析 WebPbooleanfalse微信
u-style外层动画容器自定义样式,CSS 字符串string""全部

Slots ​

名称说明平台
loading自定义加载占位内容,由 show-loading 控制全部
error自定义失败占位内容,由 show-error 控制全部

Events ​

事件说明参数平台
click点击图片区域时触发-全部
load图片加载成功时触发UniImageLoadEvent,detail 包含原图 width、height全部
error图片加载失败时触发UniImageErrorEvent,detail.errMsg 为错误信息全部

参考 ​

uvx-ui · uni-app x 组件库