Skip to content

Image 图片 - Vant 4

🖼️ Image 图片

🎯 介绍

Image 组件就像是 img 标签的超级英雄版本 🦸‍♂️!不仅拥有原生 img 的所有能力,还额外装备了多种图片填充模式、懒加载、加载状态提示等强大功能。让每一张图片都能在最佳状态下与用户见面,告别加载失败的尴尬和等待的焦虑!

📦 引入

通过以下方式来全局注册组件,更多注册方式请参考组件注册

js
import { createApp } from'vue'; import { ImageasVanImage } from'vant'; const app = createApp(); app.use(VanImage);

🚀 代码演示

🔧 基础用法

基础用法与原生 img 标签一致,可以设置 srcwidthheightalt 等原生属性。就像使用熟悉的老朋友一样简单!

html

🎨 填充模式

通过 fit 属性可以设置图片填充模式,等同于原生的 object-fit 属性。就像给图片选择不同的"穿衣风格",让它在容器中展现最佳姿态!

html

📍 图片位置

通过 position 属性可以设置图片位置,结合 fit 属性使用,等同于原生的 object-position 属性。这就像给图片安排最佳的"拍照位置"!

html

⭕ 圆形图片

通过 round 属性可以设置图片变圆,瞬间让普通图片变身为优雅的圆形头像!注意当图片宽高不相等且 fitcontainscale-down 时,将无法填充一个完整的圆形。

html

🚀 图片懒加载

设置 lazy-load 属性来开启图片懒加载,就像给图片装上了"智能感应器",只有当用户即将看到时才开始加载,大大提升页面性能!需要搭配 Lazyload 组件使用。

html
js
import { createApp } from'vue'; import { Lazyload } from'vant'; const app = createApp(); app.use(Lazyload);

⏳ 加载中提示

Image 组件提供了默认的加载中提示,就像给用户一个贴心的"请稍候"提示!支持通过 loading 插槽自定义内容,让等待也变得有趣。

html

❌ 加载失败提示

Image 组件提供了默认的加载失败提示,当图片加载遇到问题时,会优雅地显示友好提示而不是空白或破损图标。支持通过 error 插槽自定义内容。

html

API

Props

参数说明类型默认值
src图片链接string-
fit图片填充模式,等同于原生的 object-fit 属性stringfill
position图片位置,等同于原生的 object-position 属性,可选值为 top``right``bottom``leftstringstringcenter
alt替代文本string-
width宽度,默认单位为 px*numberstring*
height高度,默认单位为 px*numberstring*
radius圆角大小,默认单位为 px*numberstring*
round是否显示为圆形booleanfalse
block 3.6.3是否将根节点设置为块级元素,默认情况下为 inline-block 元素booleanfalse
lazy-load是否开启图片懒加载,须配合 Lazyload 组件使用booleanfalse

| show-error | 是否展示图片加载失败提示 | boolean | true | | show-loading | 是否展示图片加载中提示 | boolean | true | | error-icon | 失败时提示的图标名称或图片链接,等同于 Icon 组件的 name 属性 | string | photo-fail | | loading-icon | 加载时提示的图标名称或图片链接,等同于 Icon 组件的 name 属性 | string | photo |

| icon-size | 加载图标和失败图标的大小 | number | string | 32px | | icon-prefix | 图标类名前缀,等同于 Icon 组件的 class-prefix 属性 | string | van-icon |

| crossorigin | 等同于原生的 crossorigin 属性 | string | - | | referrerpolicy | 等同于原生的 referrerpolicy 属性 | string | - | | decoding v4.9.20 | 等同于原生的 decoding 属性 | string | - |

图片填充模式

名称含义
contain保持宽高缩放图片,使图片的长边能完全显示出来
cover保持宽高缩放图片,使图片的短边能完全显示出来,裁剪长边
fill拉伸图片,使图片填满元素
none保持图片原有尺寸
scale-downnonecontain 中较小的一个

Events

事件名说明回调参数
click点击图片时触发event: MouseEvent
load图片加载完毕时触发event: Event
error图片加载失败时触发-

Slots

名称说明
default自定义图片下方的内容
loading自定义加载中的提示内容
error自定义加载失败时的提示内容

类型定义

组件导出以下类型定义:

ts
importtype { ImageFit, ImagePosition, ImageProps } from'vant';

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值描述
--van-image-placeholder-text-colorvar(--van-text-color-2)-
--van-image-placeholder-font-sizevar(--van-font-size-md)-
--van-image-placeholder-backgroundvar(--van-background)-
--van-image-loading-icon-size32px-
--van-image-loading-icon-colorvar(--van-gray-4)-
--van-image-error-icon-size32px-
--van-image-error-icon-colorvar(--van-gray-4)-

常见问题

如何引用本地图片?

在 .vue 文件中通过相对路径引用本地图片时,需要在图片的链接外包上一层 require(),将图片 URL 转换为 webpack 模块请求,并结合 file-loader 或者 url-loader 进行处理。

html

对此更详细的解释可以参考 vue-loader 的处理资源路径章节。

使用 image 标签无法渲染?

使用 Image 组件时,可能会遇到将 <image> 作为标签名时无法渲染的问题,比如下面的写法:

html

这是因为 \<image> 标签是原生的 SVG 标签,Vue 不允许将原生标签名注册为组件名,使用 \<van-image> 即可规避这个问题。

📚 相关文档

🖼️ 媒体组件

🚀 性能优化

🎨 设计组件

🛠️ 开发指南

📱 布局组件

基於Vant構建的企業級移動端解決方案