微信小程序实现实时圆形进度条的方法示例


Posted in Javascript onFebruary 24, 2017

前言

最近工作中为了做一个录制按钮,研究了下小程序的实时圆形进度条实现,下面这篇文章就来给大家详细的介绍了实现的方法示例,废话不多说,先来看看效果图吧。

效果图如下

微信小程序实现实时圆形进度条的方法示例
初始状态

微信小程序实现实时圆形进度条的方法示例

点击中间按钮开始绘制

微信小程序实现实时圆形进度条的方法示例

绘制过程

微信小程序实现实时圆形进度条的方法示例

绘制结束

实现思路

建立两个canvas标签,先绘制底层的浅灰色圆圈背景,再绘制上层的红色进度条。

WXML代码

<view class="wrap">
 <view class="circle-box">
 <canvas class="circle" style="width:200px; height:200px;" canvas-id="canvasArcCir">
 </canvas>
 <canvas class="circle" style="z-index: -5; width:200px; height:200px;" canvas-id="canvasCircle">
 </canvas>
 <view class="draw_btn" bindtap="drawCircle">开始动态绘制</view>
 </view>
</view>

WXSS代码

特别注意:底层的canvas最好使用

z-index:-5;放置于底层

page {
 width: 100%;
 height: 100%;
 background-color: #fff;
}

.circle-box {
 text-align: center;
 margin-top: 10vw;
}

.circle {
 position: absolute;
 left: 0;
 right: 0;
 margin: auto;
}

.draw_btn {
 width: 35vw;
 position: absolute;
 top: 33vw;
 right: 0;
 left: 0;
 margin: auto;
 border: 1px #000 solid;
 border-radius: 5vw;
}

JS代码

//获取应用实例
var app = getApp()

var interval;
var varName;
var ctx = wx.createCanvasContext('canvasArcCir');

Page({
 data: {
 },
 drawCircle: function () {
 clearInterval(varName);
 function drawArc(s, e) {
 ctx.setFillStyle('white');
 ctx.clearRect(0, 0, 200, 200);
 ctx.draw();
 var x = 100, y = 100, radius = 96;
 ctx.setLineWidth(5);
 ctx.setStrokeStyle('#d81e06');
 ctx.setLineCap('round');
 ctx.beginPath();
 ctx.arc(x, y, radius, s, e, false);
 ctx.stroke()
 ctx.draw()
 }
 var step = 1, startAngle = 1.5 * Math.PI, endAngle = 0;
 var animation_interval = 1000, n = 60;
 var animation = function () {
 if (step <= n) {
 endAngle = step * 2 * Math.PI / n + 1.5 * Math.PI;
 drawArc(startAngle, endAngle);
 step++;
 } else {
 clearInterval(varName);
 }
 };
 varName = setInterval(animation, animation_interval);
 },
 onReady: function () {
 //创建并返回绘图上下文context对象。
 var cxt_arc = wx.createCanvasContext('canvasCircle');
 cxt_arc.setLineWidth(6);
 cxt_arc.setStrokeStyle('#eaeaea');
 cxt_arc.setLineCap('round');
 cxt_arc.beginPath();
 cxt_arc.arc(100, 100, 96, 0, 2 * Math.PI, false);
 cxt_arc.stroke();
 cxt_arc.draw();
 },
 onLoad: function (options) {

 }
})

注意的要点

1、关于小程序canvas绘制,请观看微信小程序官方文档绘制

2、开始绘制的路径可以根据 JS代码中的变量startAngle 来选择从哪里开始绘制

微信小程序实现实时圆形进度条的方法示例

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用微信小程序能带来一定的帮助,最后有什么问题可以留言,大家一起讨论共同进步。

Javascript 相关文章推荐
JScript中的&quot;this&quot;关键字使用方式补充材料
Mar 08 Javascript
用javascript实现自定义标签
May 08 Javascript
javascript学习笔记(九) js对象 设计模式
Jun 19 Javascript
js获取当前时间显示在页面上并每秒刷新
Dec 24 Javascript
BootStrap制作导航条实例代码
May 06 Javascript
JS中Swiper的使用和轮播图效果
Aug 11 Javascript
vue轮播图插件vue-concise-slider的使用
Mar 13 Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 Javascript
TypeScript开发Node.js程序的方法
Apr 30 Javascript
json_decode 索引为数字时自动排序问题解决方法
Mar 28 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
Nov 17 Javascript
微信小程序视频弹幕发送功能的实现
Dec 28 Javascript
JavaScript中三种常见的排序方法
Feb 24 #Javascript
Angular2 Service实现简单音乐播放器服务
Feb 24 #Javascript
Bootstrap3多级下拉菜单
Feb 24 #Javascript
使用原生的javascript来实现轮播图
Feb 24 #Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 #Javascript
微信小程序 定位到当前城市实现实例代码
Feb 23 #Javascript
JavaScript中值类型和引用类型的区别
Feb 23 #Javascript
You might like
用ODBC的分页显示
2006/10/09 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
浅析vue深复制
2018/01/29 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
js实现星星打分效果
2020/07/05 Javascript
Python3 socket同步通信简单示例
2017/06/07 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python 进程的几种创建方式详解
2019/08/29 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
新浪网技术部笔试题
2016/08/26 面试题
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
将相和教学反思
2014/02/04 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
基层工作经验证明样本
2014/11/16 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP