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


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 相关文章推荐
JavaScript RegExp方法获取地址栏参数(面向对象)
Mar 10 Javascript
js no-repeat写法 背景不重复
Mar 18 Javascript
JS 时间显示效果代码
Aug 23 Javascript
jQuery获得内容和属性示例代码
Jan 16 Javascript
javascript判断数组内是否重复的方法
Apr 21 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
Jan 20 Javascript
jQuery qrcode生成二维码的方法
Apr 03 Javascript
Javascript实现代码折叠功能
Aug 25 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 Javascript
js 函数式编程学习笔记
Mar 25 Javascript
微信小程序 空白页重定向解决办法
Jun 27 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 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
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
PHP单例模式详细介绍
2015/07/01 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
extjs render 用法介绍
2013/09/11 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
Python中decorator使用实例
2015/04/14 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
不可错过的十本Python好书
2017/07/06 Python
Python语言的变量认识及操作方法
2018/02/11 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
高性能装备提升营地:Kammok
2019/02/27 全球购物
大学毕业感言
2014/01/10 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
七年级政治教学反思
2014/02/03 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
教师岗位说明书
2015/09/30 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL