微信小程序canvas圆形进度条加载动画实现

简介:

需要一个圆形进度插件,可以用canvas实现,加载速度与粒度可以自行调节,根据sec 与 speed 进行计算,欢迎交流指导
wxml页面

<view class="loading-warp">
    <canvas class="canvas" canvas-id="canvasCircle"></canvas>
    <canvas class="canvas-mask" canvas-id="canvasRing"></canvas>
    <view class="rate">{{step}}%</view>
</view>
<view class="loading-tips">{{tips}}</view>

wxss部分

/* loading start */
.loading-warp {
    z-index: 0;
    position: relative;
    margin: 100px auto 20px;
    width: 200px;
    height: 200px;
}
.canvas {
    z-index: 1;
    width: 200px;
    height: 200px;
}
.canvas-mask {
    z-index: 2;
    position: absolute;
    top: 0;
    left: 0;
    width: 200px;
    height: 200px;
}
.rate {
    z-index: 1;
    position: absolute;
    top: 80px;
    left: 0;
    width: 100%;
    text-align: center;
    color: #fff;
    font-size: 40rpx;
}
.loading-tips {
    text-align: center;
    font-size: 40rpx;
    font-weight: 400;
    color: #fff;
}
/* loading end */

js部分

Page({
    data: {
        tips: '加载中',
        step: 0
    },
    onReady: function(){
        var me = this;
        var cxt = wx.createCanvasContext('canvasCircle');
        cxt.setLineWidth(6);
        cxt.setStrokeStyle('#eaeaea');
        cxt.setLineCap('round');
        cxt.beginPath();
        cxt.arc(100, 100, 96, 0, 2 * Math.PI, false);
        cxt.stroke();
        cxt.draw();
        //加载动画
        var steps = 1,startAngle = 1.5 * Math.PI,endAngle = 0,speed = 100,sec = 100;
        function drawing (s, e) {
            var context = wx.createCanvasContext('canvasRing');
            context.setLineWidth(6);
            context.setStrokeStyle('#11be0f');
            context.setLineCap('round');
            context.beginPath();
            context.arc(100, 100, 96, s, e, false);
            context.stroke();
            context.draw();
        }
        function drawLoading (){
            if(steps < 101){
                //这里用me,同步数据,渲染页面
                me.setData({
                    step: steps
                })
                endAngle = steps * 2 * Math.PI / speed + startAngle;
                drawing(startAngle, endAngle);
                steps++;
                console.log(steps);
            }else{
                clearInterval(this.interval);
            }
        }
        this.interval = setInterval(drawLoading,sec);
    }
    
})

1540451574832

目录
相关文章
|
1月前
|
前端开发 小程序 JavaScript
小程序 canvas 生成海报 一次搞掂
小程序 canvas 生成海报 一次搞掂
27 1
|
1月前
|
缓存 小程序 UED
如何利用小程序的生命周期函数实现数据的加载和更新?
如何利用小程序的生命周期函数实现数据的加载和更新?
59 4
|
1月前
|
前端开发 小程序 JavaScript
微信小程序 canvas 备忘
微信小程序 canvas 备忘
34 0
|
6月前
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
3月前
|
监控 小程序 数据处理
揭秘支付宝小程序性能优化秘籍:从加载到运行,每一步都快人一步!
【8月更文挑战第27天】本文深入探讨了支付宝小程序性能优化的关键技术和策略,包括减少网络请求、利用CDN加速、代码按需加载、图片压缩、懒加载以及性能监控等多方面内容,并提供了实用的示例代码,帮助开发者显著提升小程序的加载速度与运行效率,创造更佳用户体验。
79 1
|
4月前
|
小程序
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
84 1
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
|
4月前
|
前端开发 小程序
【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
408 0
|
5月前
|
小程序 Linux C语言
Linux小程序 —— 进度条
Linux小程序 —— 进度条
89 6
|
4月前
|
API
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
|
4月前
|
小程序 前端开发
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
246 0