API应用案例(下)
- 6.1【案例5】模拟时钟
- 6.1.1 案例分析
- 6.1.2 前导知识
- 6.1.3 钟表页面布局
- 6.1.4 钟表页面绘制
- 6.2【案例6】罗盘动画
- 6.2.1 案例分析
- 6.2.2 前导知识
- 6.2.3 设计罗盘页面布局
- 6.2.4 手指触摸旋转罗盘
- 6.2.5 单击按钮操作罗盘
- 6.3【案例7】文件上传与下载
- 6.3.1 案例分析
- 6.3.2 前导知识
- 6.3.3 录音和上传
- 6.3.4 文件的下载
- 6.4【案例8】在线聊天系统
- 6.4.1 案例分析
- 6.4.2 前导知识
- 6.4.3 编写Node.js服务器端代码
- 6.4.4 实现通信功能
- 6.4.5 编写聊天页面
- 总结
6.1【案例5】模拟时钟
6.1.1 案例分析
模拟时钟任务需求:
- 使用canvas绘制时钟,实现模拟时钟的功能。
- 钟表时间与系统时间保持一致,刻度将24小时制转化为12小时制。
- 绘制中心圆
- 绘制外层大圆
- 绘制分针、时针、秒针。
页面效果图:

6.1.2 前导知识
- canvas组件(原生组件,默认宽高为300px*225px)
canvas 常用属性:

canvas用法:
- 创建canvas.wxml文件。

- canvas组件默认样式如下。

canvas组件默认效果图:

注意:
canvas组件是原生组件,它的层级是最高的,不能通过z-index设置层级,css动画对canvas组件无效。
- canvas绘制矩形,演示绘制的基本步骤
第1步:创建Canvas绘图上下文对象CanvasContext

第2步:使用Canvas绘图上下文进行绘图描述

第3步:画图

矩形效果图:

- canvas绘制笑脸,示例代码如下:
第1步:创建Canvas绘图上下文对象CanvasContext

第2步:设置线条颜色和线宽

第3步:移动画笔坐标位置,绘制(外部大圆)

第4步:移动画笔坐标位置,绘制(嘴巴线条)

第5步:移动画笔坐标位置,绘制(左眼圆圈)

第6步:移动画笔坐标位置,绘制(右眼圆圈)

第7步:画出当前路径的边框

第8步:移动画笔坐标位置,绘制(左眼圆圈)

笑脸效果图:

- canvas对象方法介绍:
CanvasContext.draw ():将之前在绘图上下文中的描述(路径、样式、变形)画到canvas中。
CanvasContext.arc():创建一条弧线。
CanvasContext.rect():创建一个矩形路径。
CanvasContext.lineTo():新增一个新点,用stroke方法来画线条。
CanvasContext.moveTo():把路径移动到画布中的指定点,不创建线条。
6.1.3 钟表页面布局

6.1.4 钟表页面绘制

6.2【案例6】罗盘动画
6.2.1 案例分析
风水罗盘动画任务需求:
- 实现旋转动画效果。
- 实现缩放动画效果。
- 实现移动动画效果。
- 实现倾斜动画效果。
- 实现旋转和缩放动画同时效果。
- 实现旋转后缩放动画效果。
6.2.2 前导知识
- wx.createAnimation()
wx.createAnimation() 参数对象的常用属性:

- animation动画对象
- animation.step():动画队列。
- animation.export():导出动画。
- animation.rotate(number angle):从原点顺时针旋转一个角度。
- animation.scale(number sx, number sy):缩放。
- animation.skew(number ax, number ay):倾斜
- animation.translate(number tx, number ty):平移变换。
6.2.3 设计罗盘页面布局


6.2.4 手指触摸旋转罗盘


6.2.5 单击按钮操作罗盘
- 编写rotate()函数,实现从原点顺时针旋转一个角度

- 编写scale()函数,实现缩放效果

- 编写translate()函数,实现平移变换

- 编写skew()函数,实现对 X、Y 轴坐标进行倾斜

- 编写rotateAndScale()函数,实现旋转和缩放同时进行

- 编写rotateThenScale()函数,实现旋转之后再缩放

- 编写all()函数,实现同时展示全部动画

- 编写allOrder()函数,实现按顺序展示全部动画

- 编写reset()函数,实现回到原始状态

6.3【案例7】文件上传与下载
6.3.1 案例分析
文件上传、下载案例任务需求:
- 实现了请求服务器文件的上传与下载。
- 实现调起设备录音功能。
- 实现停止录音功能。
- 实现播放录音功能。
- 实现上传录音文件到服务器的功能
6.3.2 前导知识
- 录音API

- 文件上传API

- 文件下载API

6.3.3 录音和上传

在Page()前面编写代码,获取音频实例对象和录音管理器对象,并在录音完成后保存音频文件的临时路径

在Page()中编写代码:

6.3.4 文件的下载
文件的下载任务需求:
- 用户单击“播放文章”按钮,调用wx.downloadFile()方法。
- 把服务器文件下载到本地。
- 接口调用成功后,在success()回调函数中播放音频文件。


6.4【案例8】在线聊天系统
6.4.1 案例分析
在线聊天案例实现了客户端和服务器端的对话聊天,服务器端用Node.js来搭建服务,客户端通过小程序中的WebSocket API来实现。
在线聊天系统任务需求:
- 服务器向小程序发送消息,展示在聊天界面的左侧。
- 小程序向服务器发送信息,展示在聊天界面的右侧。
- 小程序发送消息,服务器端收到后自动回复消息返送给小程序。
页面效果图:

6.4.2 前导知识
- WebSocket
WebSocket作用:- 实现了浏览器和服务器的全双工通信。
- 是客户端与服务器之间专门建立的一条通道。
- 建立连接后,就可以从通道中实时获取服务器的数据。
注意事项:WebSocket的协议是以ws或wss开头的,在小程序中,正式项目必须使用wss协议,在开发模式下可以使用ws协议。
- wx.connectSocket(),创建一个WebSocket连接:

- wx.sendSocketMessage(),通过WebSocket连接发送数据:

- wx.onSocketMessage(),监听WebSocket接受到服务器的消息事件:

6.4.3 编写Node.js服务器端代码
本节选择使用Node.js搭建开发者服务器,安装Node.js,创建项目:
- 初始化项目,将会自动创建package.json配置文件。

- 安装webSocket库。

- 安装nodemon监控文件修改(如果已经安装则跳过此步)。

执行上述命令后,在项目目录下创建socket.js文件,编写代码如下:
- 引入http模块和WebSocket库。

- 创建一个webSocket Server。

- 事件监听。

- 连接的关闭监听。

- 接收控制台中的输入。

- 暴露对外访问接口地址。

- 保存上述代码后,执行如下命令,启动服务器。

6.4.4 实现通信功能
- 创建空白项目,在app.json中添加页面路径。

- 进入index.js中,连接服务器测试。

执行上述代码,在服务器控制台看到输出结果。

小程序端控制台接收消息结果,如下图所示:

6.4.5 编写聊天页面


进入index.js文件,监听服务器发送给客户端的消息,并将消息显示在页面中。

编写rolling_bottom()方法,使聊天内容始终显示在最底端。

初始化data:{}数据。

编写input输入框绑定事件bindChange()函数,监听input值的改变。

编写“发送”按钮绑定事件send()函数,判断发送内容是否为空。

编写temp对象。

编写发送对象为空的逻辑代码。

编写关闭页面的onUnload()函数,关闭WebSocket连接。

总结
本章讲解了canvas绘图、animation动画、文件上传与下载、录音与播放,以及通过WebSocket实现在线聊天系统。通过本章学习,读者应掌握这些技术的使用,能够利用canvas来绘制各种图形;能够使用animation动画实现移动、旋转、移动、缩放等效果;能够根据实际需求开发文件上传、下载、录音、在线聊天等功能。



















