第3章 莫凡商城首页的静态布局设计
第3章莫凡商城首页的静态布局设计
开发一个莫凡商城微信小程序时,需要确保用户可以浏览各种商城图书信息。在设计小程序页面时,需要使用不同的视图容器组件来展示
不同的内容并实现交互效果。view组件是最基本的容器组件,可以使用它来布局其他组件,设计页面的结构和层次。swiper组件可以实现图
片轮播的效果,可以在首页上使用它展示各个景点的精美图片,让用户通过滑动屏幕浏览不同的景点图片。text组件用于显示文字内容,可
以使用它来展示景点的名称、特点等相关信息。image组件用于显示图片,可以使用它来展示景点的封面图或其他相关图片,吸引用户的注
意。
莫凡商城首页包含3个部分:第1部分是用来搜索莫凡商城图书的搜索区域;第2部分是通过海报轮播效果显示的轮播广告;第3部分是用来
展示图书商品的区域,每个区域展示3本图书,其中“更多”可以链接更多的图书商品。

3.1需求分析
莫凡商城首页包含搜索、海报轮播、展示图书商品、查看更多图书商品等功能,它的布局设计需要用到视图容器组件,如view组件、swiper
组件、text组件、image组件等。本章会详细介绍这些组件及其使用方法,海报轮播效果使用swiper组件来实现;点击搜索区域和查看更多图
书商品时会进行页面跳转,会用到导航组件和导航API;页面的样式需要用WXSS来渲染,进行页面美化布局,最终完成莫凡商城首页的静态
布局设计。
3.2视图容器组件的应用
视图容器组件是用来进行页面布局的,不同的视图容器组件可以用来实现不同的布局效果,view组件是基本的容器组件,scroll-view是可滚
动视图容器组件,swiper是滑块视图容器组件,movable-view是可移动视图容器组件。
3.2.1 视图容器组件view
view组件是WXML页面布局的基础组件,也是最常用的页面布局组件,它的使用方法和HTML里的<div>类似。view组件的属性如表3.1所示。
表3.1 view组件的属性属性类型默认值说明hover-classstringnone指定点击时的样式类。当hover-
class="none"时,表示没有点击态效果hover-stop-propagationbooleanfalse指定是否阻止本节点的祖先节点出现
点击态hover-start-timenumber50指定按住后多久出现点击态,单位为mshover-stay-timenumber400指定手指松
开后点击态的保留时间,单位为ms
3.2.2 可滚动视图容器组件scroll-view
scroll-view组件允许视图容器中的内容进行横向滚动或纵向滚动,类似于浏览器的水平滚动条和垂直滚动条,可以在有限的显示窗口中,通
过滚动的方式显示更多的内容。scroll-view组件的常用属性如表3.2所示。
表3.2 scroll-view组件的常用属性属性类型默认值说明scroll-xbooleanfalse允许横向滚动scroll-
ybooleanfalse允许纵向滚动scroll-topnumber设置纵向滚动条位置scroll-leftnumber设置横向滚动条位置scroll-
into-viewstring值应为某子元素id,表示滚动到该元素时,元素顶部对齐滚动区域顶部scroll-with-
animationboolean在设置滚动条位置时使用动画过渡enable-back-to-topbooleanfalse在iOS中点击顶部状态栏、
Android系统中双击标题栏时,滚动条返回顶部(只支持纵向滚动)bindscrolltouppereventhandle滚动到顶部/左
端时会触发scrolltoupper事件bindscrolltolowereventhandle滚动到底部/右端时会触发scrolltolower事件

注意
(1)基础库2.4.0以下版本不支持嵌套textarea(多行输入框)、map(地图)、canvas(画布)
和video(视频)组件。
(2)scroll-into-view的优先级高于scroll-top。
(3)在滚动scroll-view组件时会阻止页面回弹,无法触发onPullDownRefresh事件;若要触发,需要使用页面的滚动组件,而不是scroll-view组件。
3.2.3 滑块视图容器组件swiper
swiper组件是经常会用到的组件,它可以实现海报轮播效果或者多种登录方式(账号与密码登录、手机号快捷登录等)之间的切换,可以用
来在指定区域内切换显示不同内容。swiper组件的属性如表3.3所示。
表3.3 swiper组件的属性属性类型默认值说明indicator-dotsbooleanfalse设置是否显示面板指示点
indicator-colorcolorrgba(0, 0, 0, 3)设置指示点颜色indicator-active-colorcolor#000000设置当前选中的指示点颜
色autoplaybooleanfalse设置是否自动切换currentnumber0设置当前页面的indexintervalnumber5000设置自动切
换的时间间隔durationnumber500设置滑动动画时长circularbooleanfalse设置是否采用衔接滑动
verticalbooleanfalse设置滑动方向是否为纵向
3.2.4 可移动视图容器组件movable-view
movable-view是可移动视图容器组件,在页面中可以被拖曳。在使用这个组件时,需要先定义可移动区域movable-area,然后定义直接子
节点movable-view,否则不能移动。movable-area需要设置width和 height属性,不设置时默认为10 px。movable-view也需要设置width和
height属性,不设置时默认为10 px。movable-view默认为绝对定位, top和left属性为0 px。movable-view组件的常用属性如表3.4所示。
表3.4 movable-view组件的属性属性类型默认值说明directionstringnone设置movable-view的
移动方向。属性值有all、vertical、horizontal、noneinertiabooleanfalse设置movable-view是否带有惯性out-of-
boundsbooleanfalse设置超过可移动区域后,movable-view是否还可以移动xnumber / string定义x轴方向的偏
移。如果x的值不在可移动范围内,movable-view会自动移动到可移动范围内;改变x的值会触发动画ynumber /
string定义y轴方向的偏移。如果y的值不在可移动范围内,movable-view会自动移动到可移动范围内;改变y的值
会触发动画dampingnumber20阻尼系数,用于控制x或y的值改变时的动画和过界回弹的动画,值越大,移动越快
frictionnumber2摩擦系数,用于控制惯性滑动的动画,值越大,摩擦力越大,滑动停止越快;必须大于0,否则
会被设置成默认值disabledbooleanfalse设置是否禁用movable-view的拖动功能scalebooleanfalse设置是否支持双
指缩放,默认缩放手势生效区域在movable-view内scale-minnumber0.5定义缩放倍数最小值scale-maxnumber10
定义缩放倍数最大值scale-valuenumber1定义缩放倍数,取值范围为0.5〜10animationbooleantrue设置是否使用
动画bindchangeeventhandle设置拖动过程中触发的事件,event.detail = {x: x, y: y, source: source}。其中
source是产生移动的原因,值可为touch(拖动)、touch-out- of-bounds(超出移动范围)、out-of-bounds(超出
移动范围后的回弹)、friction(惯性)和空字符串(setData())bindscaleeventhandle设置缩放过程中触发的事
件。event.detail = {scale: scale}htouchmoveeventhandle设置初次手指触摸后移动方向为横向时触发。如果
catch此事件,则意味着touchmove事件(手指触摸后移动事件)也被catchvtouchmoveeventhandle设置初次手指
触摸后移动方向为纵向时触发。如果catch此事件,则意味着touchmove事件(手指触摸后移动事件)也被catch
3.2.5 项目实战:使用AI编程工具辅助实现搜索区域
布局与海报轮播1
.任务目标
实现搜索区域布局与海报轮播功能,利用view组件、image组件来完成搜索区域布局,实现搜索区域布局水平居中和垂直居中,利用swiper组
件实现海报轮播功能。
莫凡商城首页顶部为搜索区域和海报轮播区域,海报轮播区域可以动态地显示不同海报内容。
2.任务实施
(1)打开通义灵码,输入以下内容并发送,如图3.1所示。
实现微信小程序首页的搜索区域布局,最外层盒子宽为100%,高为 300rpx,背景色为#DC7365,左下和右下圆角边框为60rpx,盒子内部
分为两部分内容,第一部分最左边是更多图标、中间为搜索框,搜索框内部左边有搜索图标、右边是搜索按钮,最右边是购物车图标,第
二部分横向排列,分别为“品质好物”“一站购齐”“极速送达”“无忧售后”。
等待AI编程工具生成代码。

图3.1 发送需求(1)
(2)实现搜索区域布局后,继续实现海报轮播功能。输入“下面继续实现海报轮播功能,有3张海报图片,使用swiper组件在微信小程序里
面实现此功能,可以自动轮播,5秒一次,显示原点,宽度为100%,高度为图片高度。”并发送,如图3.2所示。

图3.2 发送需求(2)
3.AI生成
通义灵码根据需求生成了实现搜索区域布局的代码,包括WXML布局以及WXSS样式,如图3.3所示。

图3.3 通义灵码实现搜索区域布局
通义灵码继续实现了海报轮播功能,如图3.4所示。

图3.4 通义灵码实现海报轮播功能
4.优化建议
在运行AI生成的代码后,发现其结果与我们的实际需求还有一定的差距,可以从以下几个方面进行优化。
- 对需求进行更加细致的描述后再次进行生成,例如在生成搜索框的时
候,给出具体的宽高和背景色。
- 分模块生成,例如先完成搜索区域模块内容,再完成海报轮播模块内
容。
- 根据自己的实际需求手动调整代码,例如生成轮播图的时候,我们可
以手动设置轮播图的大小。
5.页面展示
代码经过优化后,运行代码,页面样式如图3.5所示。

图3.5 首页的搜索区域布局与海报轮播效果
3.3基础内容组件
使用微信小程序的基础内容组件能快速进行各种页面布局设计。基础内容组件包括icon组件、text组件、progress组件、rich-text组件、富
文本编辑器editor等。
3.3.1 图标组件icon
微信小程序提供了丰富的icon组件,有成功、警告、提示、取消、下载等不同的含义,可应用于不同场景,如图3.6所示。

图3.6 icon组件
3.3.2 文本组件text
text组件是用来放置文本信息的组件,其属性如表3.5所示。
表3.5 text组件的属性属性类型默认值说明user-selectbooleanfalse设置文本是否可选,该属性会使文
本节点显示inline-blockspacestring设置显示连续空格,ensp为半角空格大小,emsp为全角空格大小,nbsp为根
据字体设置的空格大小decodebooleanfalse设置是否解码
text组件支持转义符“\”,如换行“\n”、空格“\t”。text组件内只支持嵌套 text组件,除了text组件外的其他组件都无法长按选中。decode属性可
以解析的有不换行空格()、小于号(<)、大于号(>)、&符号(&)、引号(')、半角空格()、全角空格(),各个操作系统的空
格标准并不一致。
3.3.3 进度条组件progress
progress组件是一种用来提升用户体验的组件,就像视频播放器一样,可以通过进度条看到完整视频的长度、当前播放进度,拖动进度条可
控制播放,让用户能合理地安排自己的时间。progress组件的属性如表 3.6所示。
表3.6 progress组件的属性属性类型默认值说明percentnumber设置百分比(0〜100)show-
infobooleanfalse设置是否在进度条右侧显示百分比border-radiusnumber/string0设置圆角大小font-
sizenumber/string16设置进度条右侧百分比的字体大小stroke-widthnumber6设置进度条线的宽度,单位为
pxcolorstring#09bb07设置进度条颜色activeColorstring#09bb07设置激活部分的进度条的颜色
backgroundColorstring#ebebeb设置未激活部分的进度条的颜色activebooleanfalse设置进度条是否显示从左往右
的动画式流动填充效果active-modestringbackwardsbackwards:动画从头播放。forwards:动画从上次结束点接
着播放durationnumber30设置进度增加1%所需的时间,单位为msbindactiveendeventhandle设置动画完成事件
3.3.4 富文本组件rich-text
通过rich-text组件可以在WXML页面文件中显示一些富文本内容,如显示HTML的一些元素内容。rich-text组件的属性如表3.7所示。
表3.7 rich-text组件的属性属性类型默认值说明nodesarray/string[ ]节点列表/HTML字符串
spacestring显示连续空格,ensp为半角空格大小,emsp为全角空格大小,nbsp为根据字体设置的空格大小user-
selectbooleanfalse设置文本是否可选,该属性会使节点显示为block
3.3.5 富文本编辑器editor
富文本编辑器editor可以对图片、文字进行编辑,可以导出带标签的 HTML代码和纯文本内容,富文本组件内部引入了一些基本的样式,使
得内容可以正确展示,开发时可以对这些内容进行覆盖。editor的属性如表3.8所示。
表3.8 editor的属性属性类型默认值说明read-onlybooleanfalse设置编辑器是否为只读
placeholderstring设置提示信息show-img-sizebooleanfalse设置点击图片时是否显示图片大小控件show-img-
toolbarbooleanfalse设置点击图片时是否显示工具栏控件show-img-resizebooleanfalse设置点击图片时是否显示修
改尺寸控件bindreadyeventhandle当编辑器初始化完成时触发bindfocuseventhandle当编辑器获得焦点时触发,
event.detail = {html, text, delta}bindblureventhandle当编辑器失去焦点时触发,event.detail = {html, text,
delta}bindinputeventhandle当编辑器内容改变时触发,event.detail = {html, text,
delta}bindstatuschangeeventhandle当通过context改变编辑器内样式时触发,返回选区已设置的样式
3.4图片组件image及图片API
在微信小程序开发中,图片展示是常见的功能需求,合理使用image组件和相关API能有效提升用户体验。下面将详细介绍image组件的使用
方法和图片API。
3.4.1 图片组件image
image组件的默认宽度为300 px、高度为225 px。在image组件中,二维码、小程序码图片不支持长按识别,仅在wx.previewImage()中支持
长按识别。它有两类展现模式:一类是缩放模式,总共有5种方式;另一类是裁剪模式,总共有9种方式。image组件的属性如表3.9所示。
表3.9 image组件的属性属性类型默认值说明srcstring设置图片资源地址modestring'scaleToFill'设置
图片裁剪、缩放的模式webpbooleanfalse默认不解析webp格式,只支持网络资源lazy-loadbooleanfalse设置图片
是否懒加载,在即将进入一定范围(上下三屏)时才开始加载show-menu-by-longpressbooleanfalse设置是否开
启长按图片显示识别小程序码或二维码菜单binderroreventhandle设置当错误发生时,发布到AppService的事件
名,事件对象event.detail = {errMsg: 'something wrong'}bindloadeventhandle设置当图片载入完毕时,发布到
AppService的事件名,事件对象event.detail ={height:'图片高度px',width:'图片宽度px'}
可以通过mode属性来设置5种缩放模式,缩放模式及其说明如表3.10 所示。
表3.10 5种缩放模式及其说明模式说明scaleToFill不保持纵横比缩放图片,使图片的宽高完全拉
伸至填满image元素aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。可以完整地将图片显示出来
aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。图片通常只在水平或垂直方向是完整的,另
一个方向将会被截掉一部分widthFix宽度不变,高度自动变化heightFix缩放模式,高度不变,宽度自动变化
3.4.2 图片API
API是一种接口函数,可以让微信小程序访问应用程序,实现图片处理、文件操作、微信支付、分享等功能。
1.wx.chooseImage()
小程序通过wx.chooseImage()选择图片,可以从本地相册选择图片或使用相机拍照功能来选择图片,但本接口已停止维护,后续请使用
wx.chooseMedia()接口。wx.chooseImage()的参数说明如表3.11所示。
表3.11 wx.chooseImage()的参数说明属性类型是否必填说明countnumber否最多可以选择
的图片张数,默认值为9sizeTypestring/array否设置显示original原图或compressed压缩图,默认二者都有
sourceTypestring/array否album为从相册选图,camera为使用相机拍照,默认二者都有successfunction否成功则
返回图片的本地文件路径列表tempFilePathsfailfunction否接口调用失败的回调函数completefunction否接口调用
结束的回调函数(调用成功、失败都会执行)
2.wx.chooseMedia()
wx.chooseMedia()用来从本地相册选择图片或视频或使用相机拍摄功能来选择图片或视频。wx.chooseMedia()的参数说明如表3.12所示。
表3.12 wx.chooseMedia()的参数说明属性类型是否必填说明countnumber否最多可以选择
的图片张数,默认值为9mediaTypearray.<string>否文件类型:image(图片)、video(视频)、mix(图片和视
频)sizeTypearray.<string>否所选图片的尺寸,original为原图,compressed为压缩图。默认二者都有
sourceTypearray.<string>否选择图片的来源,album为从本地相册选图,camera为使用相机拍摄。默认二者都
有maxDurationnumber是视频最长拍摄时间,单位为秒(s),范围为3s至60s之间,不限制视频来源
successfunction否成功则返回图片的本地文件路径列表tempFilePathsfailfunction否接口调用失败的回调函数
completefunction否接口调用结束的回调函数(调用成功、失败都会执行)
3.wx.previewImage()
wx.previewImage()用来预览多张图片,并设置默认显示的图片,其参数说明如表3.13所示。
表3.13 wx.previewImage()的参数说明属性类型是否必填说明currentstring否当前显示图
片的链接,不填则默认为urls的第一张urlsstring/array是需要预览的图片链接列表successfunction否接口调用成功
的回调函数failfunction否接口调用失败的回调函数completefunction否接口调用结束的回调函数(调用成功、失
败都会执行)
4.wx.getImageInfo()
wx.getImageInfo()用来获取图片信息,网络图片须先配置download域名才能生效,包括图片的宽度、图片的高度及图片返回的路径,其参
数说明如表3.14所示。
表3.14 wx.getImageInfo()的参数说明属性类型是否必填说明srcstring是图片的路径,可以
是相对路径、临时文件路径、存储文件路径、网络图片路径successfunction否接口调用成功的回调函数
failfunction否接口调用失败的回调函数completefunction否接口调用结束的回调函数(调用成功、失败都会执
行)
success返回参数说明如表3.15所示。
表3.15 success返回参数说明参数类型说明widthnumber图片宽度,单位为pxheightnumber图片
高度,单位为pxpathstring返回图片的本地路径orientationstring拍照时设备的方向typestring图片格式
5.wx.saveImageToPhotosAlbum()
微信小程序支持将图片保存到系统相册,但需要用户授权, wx.saveImageToPhotosAlbum()可以解决这个问题,其参数说明如表
3.16所示。
表3.16 wx.saveImageToPhotosAlbum()的参数说明属性类型是否必填说明
filePathstring/array是图片文件路径,可以是临时文件路径,也可以是永久文件路径successfunction否接口调用成
功的回调函数failfunction否接口调用失败的回调函数completefunction否接口调用结束的回调函数(调用成功、
失败都会执行)
6.wx.compressImage()
微信小程序支持将图片压缩,可以根据对图片压缩质量的需求来对 quality的属性进行设置。压缩质量的范围为0〜100,值越小,压缩质
量越低,压缩率越高(仅对.jpg文件有效)。wx.compressImage()的参数说明如表3.17所示。
wx.compressImage()调用成功后会返回压缩成功的临时路径 tempFilePath,微信开发者工具暂时不支持此wx.compressImage()调
试,需要使用真机进行开发调试。
表3.17 wx.compressImage()的参数说明属性类型是否必填/默认值说明srcstring是图片的
路径,可以是相对路径、临时文件路径、存储文件路径qualitynumber80压缩质量,范围为0〜100,值越小,压
缩质量越低,压缩率越高(仅对.jpg文件有效)successfunction否接口调用成功的回调函数failfunction否接口调
用失败的回调函数completefunction否接口调用结束的回调函数(调用成功、失败都会执行)
7.wx.chooseMessageFile()
微信小程序可以从客户端会话选择文件,可以选择视频、图片及其他文件,wx.chooseMessageFile()的参数说明如表3.18所示。
表3.18 wx.chooseMessageFile()的参数说明属性类型是否必填/默认值说明
countnumber是最多可以选择的文件个数,范围为0〜100typestring否所选的文件的类型,默认值为all。all:从所
有文件中选择。video:只能选择视频文件。image:只能选择图片文件。file:可以选择除了图片和视频之外的其
他文件extensionarray.<string>空数组根据文件扩展名过滤,仅type==file时有效。每一项都不能是空字符串。默
认不过滤failfunction否接口调用失败的回调函数completefunction否接口调用结束的回调函数(调用成功、失败
都会执行)successfunction否接口调用成功的回调函数
wx.chooseMessageFile()从客户端会话选择文件,调用成功后会返回选择的文件的本地临时文件对象数组,对象数组包括path(本地临时文
件路径)、size(本地临时文件大小,单位为B)、name(选择的文件名称)、type(选择的文件类型)、time(选择的文件的会话发送时间)。
type的合法值包括video(选择视频文件类型)、image(选择图片文件类型)、file(选择除视频和图片之外的文件类型)。
3.4.3 项目实战:使用AI编程工具辅助实现图书列表
的静态布局1
.任务目标
综合应用视图容器组件、基础内容组件、图片组件等组件实现图书列表的静态布局,学会进行页面布局及样式渲染。
图书列表包括3个区域:“热门技术”区域、“特惠时刻”区域和“畅销图书”区域,这3个区域的布局方式一样,都最多显示3本书,包括图书图
片、图书名称、图书价格,并提供查看更多入口。
2.任务实施
下面来实现图书列表的静态布局。
打开通义灵码,输入以下内容并发送,如图3.7所示。
实现“热门技术”区域,该区域分为上、下两部分,上面部分盒子左边是 “热门技术”4个字作为标题,右边是“更多”,盒子里面的文字垂直居
中,下边框为灰色,下面部分是3本图书的信息,使用flex布局,均匀分布一排,每本图书的信息最上面是图书封面,中间是图书名称,下
面是图书价格,使用wx:for循环实现。

图3.7 发送需求
3.AI生成
通义灵码根据需求生成了“热门技术”区域界面,如图3.8所示。

图3.8 通义灵码生成“热门技术”区域
4.优化建议
运行AI生成的代码后,发现其结果与我们的实际需求还有一定的差距,可以从以下几个方面进行优化。
- 对需求进行更加细致的描述后再次生成,例如指定使用flex布局、列
表如何进行排列。
- 根据自己的实际需求手动调整代码。
5.页面展示
代码经过优化后,运行代码,页面样式如图3.9所示。

图3.9 “热门技术”区域
6.文件下载
获取和查看具体的代码实现可以扫描右边二维码。
这样就实现了“热门技术”图书列表的静态布局。由于“热门技术”“特惠时刻”“畅销图书”的布局方式完全一致,因此可以直接复制代码,在这
个基础上进行改动,这里不做具体讲解。
3.5导航组件和导航API
在微信小程序页面中设置导航,可以使用navigator组件,也可以在JS 文件里通过导航API进行页面跳转,还可以设置导航条标题和显示动画
效果。
3.5.1 页面链接组件navigator
navigator组件是用在WXML中的页面跳转的导航组件,它有以下3种类型。
- 保留当前页跳转,跳转后可以返回当前页,它与wx.navigateTo()的跳
转效果一样。
- 关闭当前页跳转,无法返回当前页,它与wx.redirectTo()的跳转效果
一样。
- 跳转到tabBar页面,它与wx.switchTab()的跳转效果一样。
navigator组件的跳转效果都是通过open-type属性来控制的。navigator 组件的属性如表3.19所示。
表3.19 navigator组件的属性属性类型默认值说明targetstringself设置在哪个目标上发生跳转,
默认为当前小程序。self为当前小程序,miniProgram为其他小程序urlstring应用内的跳转链接open-
typestringnavigatenavigate对应wx.navigateTo()或wx.navigateToMiniProgram()的功能。redirect对应
wx.redirectTo()的功能。switchTab对应wx.switchTab()的功能。reLaunch对应wx.reLaunch()的功能。
navigateBack对应wx.navigateBack()的功能。exit为退出小程序,target="miniProgram"时生效deltanumber1当
open-type="navigateBack"时有效,表示回退的层数app-idstring当target="miniProgram"时有效,表示要打开的
小程序的AppIDpathstring当target="miniProgram"时有效,表示打开的页面路径,如果为空,则打开首页extra-
dataobject当target="miniProgram"时有效,表示需要传递给目标小程序的数据。目标小程序可通过
App.onLaunch()、App.onShow()获取这份数据versionstringrelease当target="miniProgram"时有效,表示要打开
的小程序版本,包括develop(开发版)、trial(体验版)、release(正式版)。仅在当前小程序为开发版或体验版
时此参数有效;如果当前小程序是正式版,则打开的小程序必定是正式版hover-classstringnavigator-hover指定
点击时的样式类。当hover-class="none"时,没有点击态效果hover-stop-propagationbooleanfalse指定是否阻止
本节点的祖先节点出现点击态hover-start-timenumber50指定按住后多久出现点击态,单位为mshover-stay-
timenumber600指定手指松开后点击态的保留时间,单位为msbindsuccessstring当target="miniProgram"时有
效,跳转小程序成功bindfailstring当target="miniProgram"时有效,跳转小程序失败bindcompletestring当
target="miniProgram"时有效,跳转小程序完成
3.5.2 保留当前页跳转API(wx.navigateTo())
wx.navigateTo()可以保留当前页面,跳转到应用内的某个页面。使用 wx.navigateBack()可以返回原页面。wx.navigateTo()的具体属性如表
3.20所示。
表3.20 wx.navigateTo()的属性属性类型是否必填说明urlstring是需要跳转到的应用内非tabBar
页面的路径,路径后可以带参数。参数与路径之间使用“?”分隔,参数键与参数值用“=”连接,不同参数用“&”分
隔,如'path?key=value&key2=value2'eventsobject否页面间通信接口,用于监听跳转的页面发送到当前页面的数
据successfunction否接口调用成功的回调函数failfunction否接口调用失败的回调函数completefunction否接口调用
结束的回调函数(调用成功、失败都会执行)
3.5.3 关闭当前页跳转API(wx.redirectTo())
wx.redirectTo()可以关闭当前页面,跳转到应用内的某个页面,但不允许跳转到tabBar页面。wx.redirectTo()的具体属性如表3.21所示。
表3.21 wx.redirectTo()的属性属性类型是否必填说明urlstring是需要跳转到的应用内非tabBar页
面的路径,路径后可以带参数。参数与路径之间使用“?”分隔,参数键与参数值用“=”连接,不同参数用“&”分
隔,如'path?key=value&key2=value2'successFunction否接口调用成功的回调函数failFunction否接口调用失败的
回调函数completeFunction否接口调用结束的回调函数(调用成功、失败都会执行)
3.5.4 跳转到tabBar页面API(wx.switchTab())
wx.switchTab()可以跳转到tabBar页面,并关闭其他所有非tabBar页面,其具体属性如表3.22所示。
表3.22 wx.switchTab()的属性属性类型是否必填说明urlstring是需要跳转到的tabBar页面的路径
(需在app.json的tabBar字段定义的页面),路径后不能带参数successFunction否接口调用成功的回调函数
failFunction否接口调用失败的回调函数completeFunction否接口调用结束的回调函数(调用成功、失败都会执
行)
wx.navigateTo()和wx.redirectTo()不允许跳转到tabBar页面,只能用 wx.switchTab()跳转到tabBar页面。
3.5.5 返回上一页API(wx.navigateBack())
wx.navigateBack()可以关闭当前页面,返回上一页面或多级页面。通过getCurrentPages()可以获取当前的页面栈,并根据需要决定返回几
层。wx.navigateBack()的具体属性如表3.23所示。
表3.23 wx.navigateBack()的属性属性类型是否必填说明deltanumber是返回的页面数,如果
delta大于现有页面数,则返回首页
3.5.6 关闭所有页面,打开某个页面API
(wx.reLaunch())
wx.reLaunch()可以关闭所有页面,然后打开应用内的某个页面,其具体属性如表3.24所示。
表3.24 wx.reLaunch()的属性属性类型是否必填说明urlstring是需要跳转到的应用内的页面路
径,路径后可以带参数。参数与路径之间使用“?”分隔,参数键与参数值用“=”连接,不同参数用“&”分隔,
如'path?key=value&key2=value2'successfunction否接口调用成功的回调函数failfunction否接口调用失败的回调
函数completefunction否接口调用结束的回调函数(调用成功、失败都会执行)
3.5.7 导航条API
导航条API有4种:wx.showNavigationBarLoading()可以在当前页面显示导航条加载动画,wx.hideNavigationBarLoading()可以在当前页面隐
藏导航条加载动画,wx.setNavigationBarTitle()可以动态设置当前页面的标题,wx.setNavigationBarColor()可以设置页面导航条颜色。
示例代码如下:
Page({
onLoad: function (options) {
//在当前页面显示导航条加载动画
wx.showNavigationBarLoading({
success:function(){
console.log("在当前页面显示导航条加载动画");
}
});
//在当前页面隐藏导航条加载动画
wx.hideNavigationBarLoading({
success: function () {
console.log("在当前页面隐藏导航条加载动画");
}
});
//动态设置当前页面的标题
wx.setNavigationBarTitle({
title:'新页面',
success:function(){
console.log("动态设置当前页面的标题");
}
});
//设置页面导航条颜色
wx.setNavigationBarColor({
frontColor:'#ffffff',//前景颜色值,包括按钮、标题、状态栏的颜色,仅支持#ffffff
//和#000000
backgroundColor: '#ff0000',//背景颜色值,有效值为十六进制颜色值
animation: { //动画效果
duration: 400, //动画持续时间
timingFunc: 'easeIn' //动画变化方式
},
success: function () {
console.log("设置页面导航条颜色");
}
});
}
})
wx.showNavigationBarLoading()、wx.hideNavigationBar Loading()、 wx.setNavigationBarTitle()这3个API使用起来比较简单,按照示例代码
使用即可。
wx.setNavigationBarColor()稍微复杂一点,其具体属性如表3.25所示。
表3.25 wx.setNavigationBarColor()的属性属性类型是否必填说明frontColorstring是前景
颜色值,包括按钮、标题、状态栏的颜色,仅支持#ffffff和#000000backgroundColorstring是背景颜色值,有效
值为十六进制颜色值animationobject是动画效果successfunction否接口调用成功的回调函数failfunction否接口调
用失败的回调函数completefunction否接口调用结束的回调函数(调用成功、失败都会执行)
animation动画效果对象包含两个属性:duration(动画持续时间,单位为ms);timingFunction(动画变化方式),提供了linear(动画从头
到尾的速度是相同的)、easeIn(动画以低速开始)、easeOut(动画以低速结束)、easeInOut(动画以低速开始和结束)4种变化方式。
3.5.8 项目实战:使用AI编程工具辅助实现图书搜索
功能1
.任务目标
实现图书搜索功能,学会应用导航组件和导航API,进一步综合应用视图容器组件、基础内容组件、图片组件等组件进行页面布局及样式渲
染。
2.任务实施
下面来实现图书搜索功能。
(1)在app.json文件里,添加搜索页面search,示例代码如下:
"pages": [
"pages/index/index",
"pages/category/category",
"pages/shoppingcart/shoppingcart",
"pages/me/me",
"pages/search/search"
]
(2)打开通义灵码,输入“微信小程序从首页搜索区域点击‘搜索’按钮跳转到搜索页面怎么实现?简单回答。”并发送,如图3.10所示。

图3.10 发送需求
(3)完成跳转功能后,使用通义灵码实现搜索页面布局,包括搜索框布局、热门搜索布局、搜索结果布局。搜索框部分我们在首页已经实
现,因此只需要实现热门搜索布局和搜索结果布局。打开通义灵码,输入以下内容并发送,如图3.11所示。
完成跳转后实现搜索页面的页面布局,包括热门搜索布局、搜索结果布局,热门搜索布局内容分为上、下两部分,上面左边是“热门搜索”标
题,右边是“换一批”文字,下面部分为一些经常搜索的文字,背景色为 #DC7365,左右的padding为5px,点击“搜索”按钮后,热门搜索布局
消失,显示搜索结果布局,搜索结果按行排列,分为左、右两部分,
左边为图书图片,右边从上到下依次为图书名称、图书作者、出版社、出版时间、价格。

图3.11 发送需求
3.AI生成
(1)通义灵码根据需求生成了从首页搜索区域点击“搜索”按钮跳转到搜索页面的实现步骤,如图3.12所示。

图3.12 通义灵码生成跳转步骤
(2)使用通义灵码实现搜索页面布局,如图3.13所示。

图3.13 通义灵码生成搜索页面布局
4.优化建议
在运行AI生成的代码后,发现其结果与我们的实际需求还有一定的差距,可以从以下两个方面进行优化。
- 按照自己的需求对函数名称进行修改,跳转到自己创建的真实页面。
- 根据自己的实际需求手动调整搜索页面的样式,例如文字的大小、间
距、颜色等。
5.页面展示
代码经过优化后,运行代码,页面样式如图3.14、图3.15所示。

图3.14 搜索框布局、热门搜索布局

图3.15 搜索结果布局
3.6项目实战:使用AI编程工具辅助实现“更多”图
书列表页面的静态布局1
.任务目标
实现“更多”图书列表页面的静态布局,需要综合应用view组件、text组件、image组件等,学会使用导航组件和导航API进行页面跳转,学会
使用视图容器组件进行页签的切换显示,学会接收页面路径携带的参数。
在“更多”图书列表页面中,上面是搜索区域,中间是“热门技术”“特惠时刻”“畅销图书”3个页签导航,下面是各个页签导航对应的内容。
2.任务实施
下面来实现“更多”图书列表页面的静态布局。
(1)在app.json文件里,添加“更多”图书列表页面,示例代码如下:
"pages": [
"pages/index/index",
"pages/category/category",
"pages/shoppingcart/shoppingcart",
"pages/me/me",
"pages/search/search",
"pages/goods/goods"
]
(2)打开通义灵码,输入以下内容并发送,如图3.16所示。
微信小程序有一个数组["热门技术""特惠时刻""畅销图书"],图书列表页面有这个3个tab、这3个tab占据一行,使用flex布局,均匀分布,选中
的时候底部边框和文字颜色为#DA4732,默认选中第一个tab,点击3 个tab中的任意一个,会展示相应的图书列表,图书列表排在tab下面,
每本图书占据一行,左边部分是图书封面,右边部分从上到下分别为图书名称、图书作者、出版社、出版时间、现价和原价。

图3.16 发送需求(1)
(3)实现“更多”图书列表布局后,继续实现从首页跳转到“更多”图书列表页面不同的tab。在通义灵码中,输入“从首页进行跳转,根据给函
数传不同的参数跳转到不同的tab,怎么实现?只给出JS代码。”并发送,如图3.17所示。

图3.17 发送需求(2)
3.AI生成
(1)通义灵码根据需求生成了实现“更多”图书列表页面布局,包括 WXML布局以及WXSS样式,实现了tab切换显示、图书列表展示等功
能,如图3.18所示。

图3.18 通义灵码生成“更多”图书列表页面布局
(2)通义灵码生成了从首页跳转到“更多”图书列表页面不同的tab的代码,如图3.19所示。

图3.19 通义灵码生成页面跳转功能
4.优化建议
在运行AI生成的代码后,发现其结果与我们的实际需求还有一定的差距,可以从以下几个方面进行优化。
- 对需求进行更加细致的描述后再次进行生成,例如在生成tab时,我
们给出了详细的需求,所以生成的代码比较符合我们的要求。
- 分模块进行生成,例如在“更多”图书列表页面中,我们可以先生成
tab,再生成图书列表。
- 根据不同情况生成不同的内容,例如在实现“从首页跳转到‘更多’图书
列表页面不同的tab”这类功能时,只需要让通义灵码给出JS部分。
- 运行生成的代码查看效果,并进行微调。
5.页面展示
代码经过优化后,运行代码,页面样式如图3.20所示。

图3.20 更多图书列表布局