
前言在微信小程序开发中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 titleimage组件 back{{false}} colorblack background#FFF/navigation-bar scroll-view classscrollarea scroll-y typelist view classbox view classtitle图片的不同显示模式/view !-- 列表渲染 -- block wx:for{{imgArray}} wx:keyindex view classitem-wrapper !-- 作业要求显示模式编号 -- view classmode-index显示模式编号{{item.index}}/view !-- 文字说明 -- view classmode-text{{item.text}}/view !-- 图片容器 -- view classimg-layout image src{{src}} mode{{item.mode}}/image /view /view /block /view /scroll-view3. 样式设计 (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 布局的基本用法。希望这篇博客能帮助到正在学习小程序开发的你