Image 图片

介绍

增强版的 img 标签,提供多种图片填充模式,支持图片懒加载、加载中提示、加载失败提示

引入

  1. import Vue from 'vue';
  2. import { Image as VanImage } from 'vant';
  3. Vue.use(VanImage);

代码演示

基础用法

基础用法与原生img标签一致,可以设置srcwidthheightalt等原生属性

  1. <van-image width="100" height="100" src="https://img.yzcdn.cn/vant/cat.jpeg" />

填充模式

通过fit属性可以设置图片填充模式,可选值见下方表格

  1. <van-image
  2. width="10rem"
  3. height="10rem"
  4. fit="contain"
  5. src="https://img.yzcdn.cn/vant/cat.jpeg"
  6. />

圆形图片

通过round属性可以设置图片变圆,注意当图片宽高不相等且fitcontainscale-down时,将无法填充一个完整的圆形。

  1. <van-image
  2. round
  3. width="10rem"
  4. height="10rem"
  5. src="https://img.yzcdn.cn/vant/cat.jpeg"
  6. />

图片懒加载

设置lazy-load属性来开启图片懒加载,需要搭配 Lazyload 组件使用

  1. <van-image
  2. width="100"
  3. height="100"
  4. lazy-load
  5. src="https://img.yzcdn.cn/vant/cat.jpeg"
  6. />
  1. import Vue from 'vue';
  2. import { Lazyload } from 'vant';
  3. Vue.use(Lazyload);

加载中提示

Image组件提供了默认的加载中提示,支持通过loading插槽自定义内容

  1. <van-image src="https://img.yzcdn.cn/vant/cat.jpeg">
  2. <template v-slot:loading>
  3. <van-loading type="spinner" size="20" />
  4. </template>
  5. </van-image>

加载失败提示

Image组件提供了默认的加载失败提示,支持通过error插槽自定义内容

  1. <van-image src="https://img.yzcdn.cn/vant/cat.jpeg">
  2. <template v-slot:error>加载失败</template>
  3. </van-image>

API

Props

参数说明类型默认值
src图片链接string-
fit图片填充模式stringfill
alt替代文本string-
width宽度,默认单位为pxnumber | string-
height高度,默认单位为pxnumber | string-
radius圆角大小,默认单位为pxnumber | string0
round是否显示为圆形booleanfalse
lazy-load是否开启图片懒加载,须配合 Lazyload 组件使用booleanfalse
show-error是否展示图片加载失败提示booleantrue
show-loading是否展示图片加载中提示booleantrue
error-icon v2.4.2失败时提示的图标名称或图片链接stringphoto-fail
loading-icon v2.4.2加载时提示的图标名称或图片链接stringphoto

图片填充模式 

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

Events

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

Slots

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

常见问题

如何引用本地图片?

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

  1. <!-- 错误写法 -->
  2. <van-image src="./image.png" />
  3. <!-- 正确写法 -->
  4. <van-image :src="require('./image.png')" />

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

使用 image 标签无法渲染?

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

  1. <template>
  2. <image src="xxx" />
  3. </template>
  4. <script>
  5. import { Image } from 'vant';
  6. export default {
  7. components: {
  8. Image,
  9. },
  10. };
  11. <script>

这是因为 Image 图片 - 图2 标签是原生的 SVG 标签,Vue 不允许将原生标签名注册为组件名,使用 即可规避这个问题。

Image 图片 - 图3