程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

    • 内置组件

      • 视图容器

      • 基础内容

      • 表单组件

      • 路由页面跳转

      • 媒体组件

        • 动画视图组件
        • 音频播放组件
        • 相机组件
        • 图片组件
          • 1. 什么是 image 组件?
          • 2. image 组件的常用属性
            • 2.1 图片资源 src
            • 2.2 图片裁剪与缩放模式 mode
            • 2.3 图片懒加载 lazy-load
            • 2.4 图片加载错误处理 @error
          • 3. 多种裁剪与缩放模式展示
        • 视频播放组件
        • 直播播放器组件
        • 直播推流组件
      • 地图

      • 画布

      • 网页嵌入

      • 页面属性配置节点

      • nvue组件

      • 小程序组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 内置组件
  • 媒体组件
scholar
2024-10-21
目录

图片组件

# 图片组件

image 组件是 Uniapp 中用于展示图片的基础组件,支持多种图片格式及显示模式,适用于在页面中展示静态图片、网络图片或本地资源图片。它提供了丰富的属性,帮助开发者控制图片的加载、显示效果、裁剪模式等功能。

# 1. 什么是 image 组件?

image 组件用于在页面中显示图片,支持本地图片、网络图片以及 Base64 编码的图片资源。通过该组件,开发者可以方便地控制图片的尺寸、缩放、裁剪、懒加载等功能。此外,它还提供了错误处理和加载完成的事件,用于增强图片的交互体验。

使用场景

  • 展示产品图片:在电商应用中,用于展示商品的图片信息。
  • 轮播图:结合 swiper 组件,用于展示轮播图片或广告图片。
  • 用户头像:在个人中心或聊天应用中,展示用户的头像。
  • 图片加载占位:在图片加载时使用占位图,提升页面加载体验。

# 2. image 组件的常用属性

image 组件提供了多种属性,用于控制图片的资源、显示模式、懒加载等。以下是常用属性的详细说明及使用示例。

属性名 类型 默认值 说明 平台差异说明
src String 无 图片资源的地址,支持本地路径、网络路径和 Base64 编码 无
mode String scaleToFill 图片的裁剪、缩放模式 无
lazy-load Boolean false 是否开启懒加载功能,只在 page 或 scroll-view 下有效 部分平台支持
webp Boolean false 是否在不支持 webp 格式的设备上单独启用 webp 图片格式 微信小程序 2.9.0+ 支持
draggable Boolean true 是否允许图片拖动 H5 3.1.1+,App(iOS 15+ 支持)
@error EventHandle 无 当图片加载失败时触发 无
@load EventHandle 无 当图片加载完成时触发,返回图片的宽度和高度 无

# 2.1 图片资源 src

  • 说明:指定要显示的图片资源路径,支持本地路径、网络路径或 Base64 编码的图片资源。
  • 类型:String
  • 默认值:无
<template>
  <view>
    <!-- 显示网络图片 -->
    <image :src="imageSrc" style="width: 100%; height: 200px;" />
  </view>
</template>

<script setup>
const imageSrc = 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg';
</script>
1
2
3
4
5
6
7
8
9
10

# 2.2 图片裁剪与缩放模式 mode

  • 说明:指定图片的裁剪或缩放模式,共有 14 种模式,具体模式详见下表。
  • 类型:String
  • 默认值:scaleToFill
模式 值 说明
缩放 scaleToFill 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素
缩放 aspectFit 保持纵横比缩放图片,使图片的长边能完全显示出来
缩放 aspectFill 保持纵横比缩放图片,只保证图片的短边能完全显示出来
缩放 widthFix 宽度不变,高度自动变化,保持原图宽高比不变
缩放 heightFix 高度不变,宽度自动变化,保持原图宽高比不变
裁剪 top 不缩放图片,只显示图片的顶部区域
裁剪 bottom 不缩放图片,只显示图片的底部区域
裁剪 center 不缩放图片,只显示图片的中间区域
裁剪 left 不缩放图片,只显示图片的左边区域
裁剪 right 不缩放图片,只显示图片的右边区域
裁剪 top left 不缩放图片,只显示图片的左上边区域
裁剪 top right 不缩放图片,只显示图片的右上边区域
裁剪 bottom left 不缩放图片,只显示图片的左下边区域
裁剪 bottom right 不缩放图片,只显示图片的右下边区域
<template>
  <view>
    <!-- 使用 aspectFill 模式 -->
    <image :src="imageSrc" mode="aspectFill" style="width: 100%; height: 200px;" />
  </view>
</template>

<script setup>
const imageSrc = 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg';
</script>
1
2
3
4
5
6
7
8
9
10

# 2.3 图片懒加载 lazy-load

  • 说明:是否启用图片懒加载功能,适用于长页面或 scroll-view 中的图片。
  • 类型:Boolean
  • 默认值:false
<template>
  <view>
    <!-- 开启懒加载 -->
    <image :src="imageSrc" :lazy-load="true" style="width: 100%; height: 200px;" />
  </view>
</template>

<script setup>
const imageSrc = 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg';
</script>
1
2
3
4
5
6
7
8
9
10

# 2.4 图片加载错误处理 @error

  • 说明:当图片加载失败时触发 @error 事件,可以在事件回调中处理加载失败逻辑,例如显示占位图。
  • 类型:EventHandle
<template>
  <view>
    <!-- 监听图片加载错误 -->
    <image :src="imageSrc" @error="handleImageError" style="width: 100%; height: 200px;" />
  </view>
</template>

<script setup>
import { ref } from 'vue';

const imageSrc = ref('https://invalid-url.com/invalid.jpg');

const handleImageError = () => {
  console.log('图片加载失败,显示占位图');
  imageSrc.value = '/static/placeholder.png';
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 3. 多种裁剪与缩放模式展示

以下案例展示了 image 组件的多种 mode 模式,包括裁剪和缩放模式。通过不同的 mode 设置,可以实现多种图片显示效果。

<template>
  <view class="image-list">
    <view class="image-item" v-for="(item, index) in modes" :key="index">
      <view class="image-content">
        <image :src="imageSrc" :mode="item.mode" style="width: 200px; height: 200px; background-color: #eeeeee;" />
      </view>
      <view class="image-title">{{ item.text }}</view>
    </view>
  </view>
</template>

<script setup>
const imageSrc = 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg';

const modes = [
  { mode: 'scaleToFill', text: 'scaleToFill:不保持纵横比缩放图片,使图片完全适应' },
  { mode: 'aspectFit', text: 'aspectFit:保持纵横比缩放图片,使图片的长边能完全显示出来' },
  { mode: 'aspectFill', text: 'aspectFill:保持纵横比缩放图片,只保证图片的短边能完全显示出来' },
  { mode: 'top', text: 'top:不缩放图片,只显示图片的顶部区域' },
  { mode: 'bottom', text: 'bottom:不缩放图片,只显示图片的底部区域' },
  { mode: 'center', text: 'center:不缩放图片,只显示图片的中间区域' },
  { mode: 'left', text: 'left:不缩放图片,只显示图片的左边区域' },
  { mode: 'right', text: 'right:不缩放图片,只显示图片的右边边区域' },
];
</script>

<style scoped>
.image-list {
  display: flex;
  flex-wrap: wrap;
}

.image-item {
  margin: 10px;
  text-align: center;
}

.image-content {
  margin-bottom: 5px;
}

.image-title {
  font-size: 14px;
  color: #333;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

recording

编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
相机组件
视频播放组件

← 相机组件 视频播放组件→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式