阶段案例-个人相册小程序
01、准备工作
1 导入代码包
为了节约时间,这里我们直接把完成的小程序空白模板代码包templateDemo复制一份并重命名为demo07_myAlbum, 导入开发工具等待改造。
2 启动服务器
这里我们使用本地电脑安装phpStudy v8.1套件来模拟服务器效果,本次阶段案例不需要使用MySQL数据库,因此直接启动Apache或者Nginx来模拟Web服务器即可。
以Nginx为例,启动效果如图7-8所示。


■ 图7-8 phpstudy_pro启动Nginx示例
找到phpStudy v8.1套件的安装目录phpstudy_pro,打开里面的WWW目录,在下一级新建myAlbum文件夹(该名称可由开发者自定义),并放入若干图片等待案例使用。效果如图7-9所示。

■ 图7-9 新建myAlbum目录与内部图片
尝试在电脑端浏览器中输入“http://localhost/myAlbum/pic01.jpg”,如果可以访问就说明服务器部署成功了,成功访问效果如图7-10所示。

■ 图7-10 尝试访问服务器端图片
注:这里的localhost换成127.0.0.1效果也是一样的,但仅限本机电脑端访问;如果想用手机或其它电脑访问,必须确保手机或其它电脑与这台模拟服务器的电脑在同一个局域网内(例如连了同一个WiFi),且需要把localhost换成IP地址的写法。
【小技巧分享:如何查本机IP地址?】
电脑端开始菜单输入“cmd”回车后唤起命令提示符窗口,在内部输入“ipconfig”指令并回车即可查看本机IPv4地址,如图7-11所示。

■ 图7-11 查询本机IP地址
此时直接在处于同一局域网下的手机浏览器中输入“http://172.28.144.158/myAlbum/pic01.jpg” (注意:这里的172.28.144.158仅为示例,需要换成开发者自己查到的实际IP地址)就可以访问了,如图7-12所示。

■图7-12 手机访问电脑模拟服务器内图片
由于当前案例无需用到小程序端本地图片素材,此时就已经做好了准备工作,最终目录结构如下图所示:

■ 图7-13 项目目录结构
02、视图设计
1 导航栏设计
在app.json文件中可以自由修改window属性来实现导航栏的颜色、文字显示。更新后的app.json文件window属性相关代码如下:
11. { 22. "pages":[…], 33. "window":{ 44. "navigationBarBackgroundColor": "#fff", 55. "navigationBarTitleText": "我的相册", 66. "navigationBarTextStyle":"black" 77. }, 88. …9. }
上述代码可以更改导航栏背景色为白色、字体为黑色,效果如图7-14所示。

■ 图7-14 自定义导航栏效果
2 首页设计
首页主要是一个垂直排列的布局:上方是标题面板,里面包含了相册标题、照片数量等信息;下方是九宫格形式的相册列表,每行3张图片;右下角另外有一个悬浮在顶层的按钮,用于上传图片。页面设计图如7-15所示。

■ 图7-15 首页设计图
计划使用组件如下:
● 顶部标题面板、底部相册列表:组件;
● 底部相册列表中的图片:组件;
● 右下角悬浮按钮:组件。
1)顶部标题面板设计
先进行顶部标题面板的设计,并在页面上预留出底部相册列表区域和按钮的代码位置。
index.wxml代码如下:
11. <!-- 1 顶部标题面板 --> 22. <view class="topBox"> 33. <!-- 1-1 标题 --> 44. <text class="title">我的摄影相册</text> 55. <!-- 1-2 副标题 --> 66. <text class="subTitle">好友可见 · 10照片</text> 77. </view> 88. 99. <!-- 2底部相册列表 --> 1010. …待补充… 1111. 1212. <!-- 3 悬浮上传按钮 --> 1313. …待补充…
index.wxss样式代码如下:
11. /* 1 顶部标题面板 */ 22. .topBox { 33. /* 宽高尺寸 */ 44. width: 100%; 55. height: 300rpx; 66. /* 渐变背景颜色 */ 77. background: linear-gradient(to bottom right, #0081ff, #1cbbb4); 88. /* 垂直居中布局 */ 99. display: flex; 1010. flex-direction: column; 1111. align-items: center; 1212. justify-content: center; 1313. } 1414. 1515. /* 1-1 标题 */ 1616. .topBox .title { 1717. font-size: 50rpx;/* 字体大小 */ 1818. color: white;/* 文字颜色 */ 1919. } 2020. 2121. /* 1-2 副标题 */ 2222. .topBox .subTitle { 2323. color: whitesmoke;/* 文字颜色 */ 2424. margin-top: 20rpx;/* 外边距顶部 */25. }
其中第7行用到的linear-gradient可以为面板做一个背景颜色的渐变特效。开发者如果有兴趣还可以自行更换其它颜色进行尝试。
此时顶部标题面板区域就完成了,效果如图7-16所示。

■ 图7-16 顶部标题面板效果图
2)底部相册列表设计
已完成区域内部分为标题区域和列表区域,index.wxml代码更新如下:
11. <!-- 1 顶部标题面板(…内容略…) --> 22. 33. <!-- 2 底部相册列表 --> 44. <view class="photoBox"> 55. <!-- 2-1 相片单张区域 --> 66. <view class="photoOne"> 77. <!-- 2-2 图片 --> 88. <image src="http://localhost/myAlbum/pic01.jpg"></image> 99. </view> 1010. </view> 1111. 1212. <!-- 3 悬浮上传按钮 --> 1313. …待补充…
注:如果要真机调试,请将上面第8行代码中的localhost换成同一局域网内的IP地址。
index.wxss代码追加内容如下:
11. /* 2 底部相册列表 */ 22. /* 2-1 相册单张区域 */ 33. .photoBox .photoOne { 44. /* 宽高尺寸 */ 55. width: 250rpx; 66. height: 250rpx; 77. float: left;/* 向左浮动 */ 88. padding: 7rpx;/* 内边距 */ 99. box-sizing: border-box;/* 宽高要包含边框和内边距 */ 1010. } 1111. 1212. /* 2-2 图片 */ 1313. .photoBox .photoOne image { 1414. /* 宽高尺寸 */ 1515. width: 100%; 1616. height: 100%;17. }
可以用wx:for属性改写相册相关代码,让其自动渲染出多张图片。由于暂时尚未能获取服务器端的完整图片列表数据,这里不妨先在index.js文件中简单写几个本地数据。
index.js的data属性修改如下:
11. // index.js 22. // 服务器地址,可根据实际情况修改 33. const baseUrl = 'http://localhost/' 44. 55. Page({ 66. 77. /** 88. * 页面的初始数据 99. */ 1010. data: { 1111. baseUrl:baseUrl, 1212. photoList:[ 1313. 'myAlbum/pic01.jpg', 1414. 'myAlbum/pic02.jpg', 1515. 'myAlbum/pic03.jpg', 1616. 'myAlbum/pic04.jpg', 1717. 'myAlbum/pic05.jpg', 1818. ] 1919. }, 2020. …21. })
注:等逻辑实现环节获取实际图片列表数据时可以清空这里的临时数组photoList。
index.wxml代码修改如下:
11. <!-- 1 顶部标题面板 --> 22. <view class="topBox"> 33. <!-- 1-1 标题 --> 44. <text class="title">我的摄影相册</text> 55. <!-- 1-2 副标题 --> 66. <text class="subTitle">好友可见 · {{photoList.length}}照片</text> 77. </view> 88. 99. <!-- 2 底部相册列表 --> 1010. <view class="photoBox"> 1111. <!-- 2-1 相片单张区域 --> 1212. <view class="photoOne" wx:for="{{photoList}}" wx:key="*this"> 1313. <!-- 2-2 图片 --> 1414. <image src="{{baseUrl+item}}"></image> 1515. </view> 1616. </view> 1717. 1818. <!-- 3 悬浮上传按钮 --> 1919. …待补充…
此时底部相册列表就全部做好了,效果如图7-17所示

■ 图7-17 底部相册列表效果图
3)浮动按钮设计
因为组件有很多自带样式不太容易调整成本次案例需要的效果,这里直接使用更简单的来实现,index.wxml代码更新如下:
11. <!-- 1 顶部标题面板(…内容略…)--> 22. <!-- 2 底部相册列表(…内容略…)--> 33. 44. <!-- 3 悬浮上传按钮 --> 55. <view class="uploadBtn">+</view>
index.wxss代码更新如下:
11. /* 3 上传按钮 */ 22. .uploadBtn { 33. /* 宽高尺寸 */ 44. width: 100rpx; 55. height: 100rpx; 66. font-size: 80rpx;/* 字体大小 */ 77. line-height: 90rpx;/* 行高 */ 88. text-align: center;/* 字体水平方向居中 */ 99. color: white;/* 文字颜色 */ 1010. background-color: #006FD1;/* 背景颜色 */ 1111. border-radius: 50%;/* 圆形边框 */ 1212. /* 绝对位置 */ 1313. position: fixed; 1414. right: 60rpx; 1515. bottom: 60rpx;16. }
此时设计环节就全部完成了,效果图如图7-18所示。

■ 图7-18 首页效果图
此时视图设计就全部完成了,下一节将进行页面的逻辑实现。
《微信小程序开发案例 | 个人相册小程序(上)》 是转载文章,点击查看原文。

