Image 图片 - Vant 4
🖼️ Image 图片
🎯 介绍
Image 组件就像是 img 标签的超级英雄版本 🦸♂️!不仅拥有原生 img 的所有能力,还额外装备了多种图片填充模式、懒加载、加载状态提示等强大功能。让每一张图片都能在最佳状态下与用户见面,告别加载失败的尴尬和等待的焦虑!
📦 引入
通过以下方式来全局注册组件,更多注册方式请参考组件注册。
import { createApp } from'vue'; import { ImageasVanImage } from'vant'; const app = createApp(); app.use(VanImage);🚀 代码演示
🔧 基础用法
基础用法与原生 img 标签一致,可以设置 src、width、height、alt 等原生属性。就像使用熟悉的老朋友一样简单!
🎨 填充模式
通过 fit 属性可以设置图片填充模式,等同于原生的 object-fit 属性。就像给图片选择不同的"穿衣风格",让它在容器中展现最佳姿态!
📍 图片位置
通过 position 属性可以设置图片位置,结合 fit 属性使用,等同于原生的 object-position 属性。这就像给图片安排最佳的"拍照位置"!
⭕ 圆形图片
通过 round 属性可以设置图片变圆,瞬间让普通图片变身为优雅的圆形头像!注意当图片宽高不相等且 fit 为 contain 或 scale-down 时,将无法填充一个完整的圆形。
🚀 图片懒加载
设置 lazy-load 属性来开启图片懒加载,就像给图片装上了"智能感应器",只有当用户即将看到时才开始加载,大大提升页面性能!需要搭配 Lazyload 组件使用。
import { createApp } from'vue'; import { Lazyload } from'vant'; const app = createApp(); app.use(Lazyload);⏳ 加载中提示
Image 组件提供了默认的加载中提示,就像给用户一个贴心的"请稍候"提示!支持通过 loading 插槽自定义内容,让等待也变得有趣。
❌ 加载失败提示
Image 组件提供了默认的加载失败提示,当图片加载遇到问题时,会优雅地显示友好提示而不是空白或破损图标。支持通过 error 插槽自定义内容。
API
Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| src | 图片链接 | string | - |
| fit | 图片填充模式,等同于原生的 object-fit 属性 | string | fill |
| position | 图片位置,等同于原生的 object-position 属性,可选值为 top``right``bottom``left 或 string | string | center |
| alt | 替代文本 | string | - |
| width | 宽度,默认单位为 px | *number | string* |
| height | 高度,默认单位为 px | *number | string* |
| radius | 圆角大小,默认单位为 px | *number | string* |
| round | 是否显示为圆形 | boolean | false |
block 3.6.3 | 是否将根节点设置为块级元素,默认情况下为 inline-block 元素 | boolean | false |
| lazy-load | 是否开启图片懒加载,须配合 Lazyload 组件使用 | boolean | false |
| 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-down | 取 none 或 contain 中较小的一个 |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| click | 点击图片时触发 | event: MouseEvent |
| load | 图片加载完毕时触发 | event: Event |
| error | 图片加载失败时触发 | - |
Slots
| 名称 | 说明 |
|---|---|
| default | 自定义图片下方的内容 |
| loading | 自定义加载中的提示内容 |
| error | 自定义加载失败时的提示内容 |
类型定义
组件导出以下类型定义:
importtype { ImageFit, ImagePosition, ImageProps } from'vant';主题定制
样式变量
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。
| 名称 | 默认值 | 描述 |
|---|---|---|
| --van-image-placeholder-text-color | var(--van-text-color-2) | - |
| --van-image-placeholder-font-size | var(--van-font-size-md) | - |
| --van-image-placeholder-background | var(--van-background) | - |
| --van-image-loading-icon-size | 32px | - |
| --van-image-loading-icon-color | var(--van-gray-4) | - |
| --van-image-error-icon-size | 32px | - |
| --van-image-error-icon-color | var(--van-gray-4) | - |
常见问题
如何引用本地图片?
在 .vue 文件中通过相对路径引用本地图片时,需要在图片的链接外包上一层 require(),将图片 URL 转换为 webpack 模块请求,并结合 file-loader 或者 url-loader 进行处理。
对此更详细的解释可以参考 vue-loader 的处理资源路径章节。
使用 image 标签无法渲染?
使用 Image 组件时,可能会遇到将 <image> 作为标签名时无法渲染的问题,比如下面的写法:
这是因为 \<image> 标签是原生的 SVG 标签,Vue 不允许将原生标签名注册为组件名,使用 \<van-image> 即可规避这个问题。
📚 相关文档
🖼️ 媒体组件
- ImagePreview 图片预览 - 图片预览组件,与 Image 组件完美搭配
- Swipe 轮播 - 轮播组件,展示多张图片的最佳选择
🚀 性能优化
- Lazyload 懒加载 - 懒加载组件,提升图片加载性能
- Loading 加载 - 加载组件,优化用户等待体验
🎨 设计组件
- Icon 图标 - 图标组件,提供加载和错误状态图标
- ConfigProvider 全局配置 - 全局配置组件,统一管理主题样式
🛠️ 开发指南
- Advanced Usage 进阶用法 - 进阶用法指南
- Theme 主题定制 - 主题定制指南