📌 前言
在微信小程序开发中,image 组件是使用频率最高的组件之一。它提供了多种图片缩放和裁剪模式(mode),以满足不同场景下的 UI 需求。本文将通过一个实战案例,演示如何在同一张图片上应用 14 种不同的显示模式,并附带一个“显示模式编号”的扩展。
🎯 案例描述
设计一个小程序,演示 image 组件不同显示模式的实现方法和效果。小程序运行后,能够以 14 种模式显示同一张图片,并且通过滚动条查看每种模式的效果。
🛠️ 项目准备
新建一个不使用云服务、不使用模板的小程序项目。
修改 app.json 文件,将 "renderer": "skyline" 修改为 "renderer": "webview"(即不使用 Skyline 渲染引擎,使用 Webview 渲染引擎)。
在小程序根目录下新建 images 文件夹,放入一张测试图片(例如 daxinganling.jpg)。
💻 核心代码实现
1. 数据逻辑 (index.js)
// index.js Page({ data: { // 图片路径 src: '/images/daxinganling.jpg', // 显示图片模式及文字说明数组 imgArray: [{ index: 1, mode: 'scaleToFill', text: 'scaleToFill: 缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素' }, { index: 2, mode: 'aspectFit', text: 'aspectFit: 缩放模式,保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来' }, { index: 3, mode: 'aspectFill', text: 'aspectFill: 缩放模式,保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取' }, { index: 4, mode: 'widthFix', text: 'widthFix: 缩放模式,宽度不变,高度自动变化,保持原图宽高比不变' }, { index: 5, mode: 'heightFix', text: 'heightFix: 缩放模式,高度不变,宽度自动变化,保持原图宽高比不变' }, { index: 6, mode: 'top', text: 'top: 裁剪模式,不缩放图片,只显示图片的顶部区域。仅 Webview 支持' }, { index: 7, mode: 'bottom', text: 'bottom: 裁剪模式,不缩放图片,只显示图片的底部区域。仅 Webview 支持' }, { index: 8, mode: 'center', text: 'center: 裁剪模式,不缩放图片,只显示图片的中间区域。仅 Webview 支持' }, { index: 9, mode: 'left', text: 'left: 裁剪模式,不缩放图片,只显示图片的左边区域。仅 Webview 支持' }, { index: 10, mode: 'right', text: 'right: 裁剪模式,不缩放图片,只显示图片的右边区域。仅 Webview 支持' }, { index: 11, mode: 'top left', text: 'top left: 裁剪模式,不缩放图片,只显示图片的左上边区域。仅 Webview 支持' }, { index: 12, mode: 'top right', text: 'top right: 裁剪模式,不缩放图片,只显示图片的右上边区域。仅 Webview 支持' }, { index: 13, mode: 'bottom left', text: 'bottom left: 裁剪模式,不缩放图片,只显示图片的左下边区域。仅 Webview 支持' }, { index: 14, mode: 'bottom right', text: 'bottom right: 裁剪模式,不缩放图片,只显示图片的右下边区域。仅 Webview 支持' }] } })2. 页面结构 (index.wxml)
<!--index.wxml--> <navigation-bar title="image组件" back="{{false}}" color="black" background="#FFF"></navigation-bar> <scroll-view class="scrollarea" scroll-y type="list"> <view class="box"> <view class="title">图片的不同显示模式</view> <!-- 列表渲染 --> <block wx:for="{{imgArray}}" wx:key="index"> <view class="item-wrapper"> <!-- 作业要求:显示模式编号 --> <view class="mode-index">显示模式编号:{{item.index}}</view> <!-- 文字说明 --> <view class="mode-text">{{item.text}}</view> <!-- 图片容器 --> <view class="img-layout"> <image src="{{src}}" mode="{{item.mode}}"></image> </view> </view> </block> </view> </scroll-view>3. 样式设计 (index.wxss 与 app.wxss)
/**index.wxss**/ page { height: 100vh; display: flex; flex-direction: column; } .scrollarea { flex: 1; overflow-y: hidden; } .item-wrapper { margin-bottom: 50px; border-bottom: 1px solid #eee; padding-bottom: 20px; } .mode-index { color: red; font-weight: bold; font-size: 32rpx; margin-top: 20px; margin-bottom: 10px; } .mode-text { font-size: 28rpx; color: #333; line-height: 1.6; margin-bottom: 20px; } .img-layout { text-align: center; margin-top: 10px; } image { width: 600rpx; height: 600rpx; background-color: #eee; display: block; margin: 0 auto; }/**app.wxss**/ .box { margin: 20px; padding: 20px; border: 2px solid silver; } .title { font-size: 40px; font-weight: bolder; text-align: center; margin-bottom: 30px; color: red; }📝 结语
通过这个案例,我们完整地学习了微信小程序 image 组件的 14 种显示模式,并掌握了 wx:for 列表渲染、数据绑定以及 Flex 布局的基本用法。希望这篇博客能帮助到正在学习小程序开发的你!