热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP进度条小程序,微信小程序的圆形进度条怎么做

这次给大家带来微信小程序的圆形进度条怎么做,实现微信小程序的圆形进度条的注意事项有哪些,下面就是实战案例,一起来看一下。需求概要小程序中使

这次给大家带来微信小程序的圆形进度条怎么做,实现微信小程序的圆形进度条的注意事项有哪些,下面就是实战案例,一起来看一下。

需求概要

小程序中使用圆形倒计时,效果图:

f45957554c2645db0a6a644b3a1cec31.png

思路使用2个canvas 一个是背景圆环,一个是彩色圆环。

使用setInterval 让彩色圆环逐步绘制。

解决方案

第一步先写结构

一个盒子包裹2个canvas以及文字盒子;

盒子使用相对定位作为父级,flex布局,设置居中;

一个canvas,使用绝对定位作为背景,canvas-id="canvasProgressbg"

另一个canvas,使用相对定位作为进度条,canvas-id="canvasProgress"

代码如下:// wxml

{{progress_txt}}

// wxss

.progress_box{

position: relative;

width:220px;

height: 220px;

// 这里的宽高是必须大于等于canvas圆环的直径 否则绘制到盒子外面就看不见了

// 一开始设置 width:440rpx; height:440rpx; 发现 在360X640分辨率的设备,下绘制的圆环跑盒子外去了

// 小程序使用rpx单位适配 ,但是canvas绘制的是px单位的。所以只能用px单位绘制的圆环在盒子内显示

display: flex;

align-items: center;

justify-content: center;

background-color: #eee;

}

.progress_bg{

position: absolute;

width:220px;

height: 220px;

}

.progress_canvas{

width:220px;

height: 220px;

}

.progress_text{

position: absolute;

display: flex;

align-items: center;

justify-content: center

}

.progress_info{

font-size: 36rpx;

padding-left: 16rpx;

letter-spacing: 2rpx

}

.progress_dot{

width:16rpx;

height: 16rpx;

border-radius: 50%;

background-color: #fb9126;

}

从wxml中可以看到我们使用了一个数据progress_txt,所以在js中设置data如下:data: {

progress_txt: '正在匹配中...',

},

第三步canvas绘制

敲黑板,划重点

1. 先绘制背景在js中封装一个画圆环的函数drawProgressbg,canvas 画圆

在onReady中执行这个函数;

小程序canvas组件与H5的canvas有点差别,请查看文档,代码如下drawProgressbg: function(){

// 使用 wx.createContext 获取绘图上下文 context

var ctx = wx.createCanvasContext('canvasProgressbg')

ctx.setLineWidth(4);// 设置圆环的宽度

ctx.setStrokeStyle('#20183b'); // 设置圆环的颜色

ctx.setLineCap('round') // 设置圆环端点的形状

ctx.beginPath();//开始一个新的路径

ctx.arc(110, 110, 100, 0, 2 * Math.PI, false);

//设置一个原点(100,100),半径为90的圆的路径到当前路径

ctx.stroke();//对当前路径进行描边

ctx.draw();

},

onReady: function () {

this.drawProgressbg();

},

看一下效果如下:

c73a349c628fab2004f1d58b4cb8c8ea.png

2. 绘制彩色圆环在js中封装一个画圆环的函数drawCircle,

在onReady中执行这个函数;drawCircle: function (step){

var context = wx.createCanvasContext('canvasProgress');

// 设置渐变

var gradient = context.createLinearGradient(200, 100, 100, 200);

gradient.addColorStop("0", "#2661DD");

gradient.addColorStop("0.5", "#40ED94");

gradient.addColorStop("1.0", "#5956CC");

context.setLineWidth(10);

context.setStrokeStyle(gradient);

context.setLineCap('round')

context.beginPath();

// 参数step 为绘制的圆环周长,从0到2为一周 。 -Math.PI / 2 将起始角设在12点钟位置 ,结束角 通过改变 step 的值确定

context.arc(110, 110, 100, -Math.PI / 2, step * Math.PI - Math.PI / 2, false);

context.stroke();

context.draw()

},

onReady: function () {

this.drawProgressbg();

this.drawCircle(2)

},

this.drawCircle(0.5) 效果如下: this.drawCircle(1) 效果如下: this.drawCircle(2) 效果如下:

1ef5259555f6b7f9772205412b70728e.png

3. 设置一个定时器

在js中的data设置一个计数器 count,一个步骤step,一个定时器

在js中封装一个定时器的函数countInterval,

在onReady中执行这个函数;data: {

progress_txt: '正在匹配中...',

count:0, // 设置 计数器 初始为0

countTimer: null // 设置 定时器 初始为null

},

countInterval: function () {

// 设置倒计时 定时器 每100毫秒执行一次,计数器count+1 ,耗时6秒绘一圈

this.countTimer = setInterval(() => {

if (this.data.count <&#61; 60) {

/* 绘制彩色圆环进度条

注意此处 传参 step 取值范围是0到2&#xff0c;

所以 计数器 最大值 60 对应 2 做处理&#xff0c;计数器count&#61;60的时候step&#61;2

*/

this.drawCircle(this.data.count / (60/2))

this.data.count&#43;&#43;;

} else {

this.setData({

progress_txt: "匹配成功"

});

clearInterval(this.countTimer);

}

}, 100)

},

onReady: function () {

this.drawProgressbg();

// this.drawCircle(2)

this.countInterval()

},

最终效果

705cd8867a192d23d908db278815b716.gif

相信看了本文案例你已经掌握了方法&#xff0c;更多精彩请关注php中文网其它相关文章&#xff01;

推荐阅读&#xff1a;



推荐阅读
  • 项目需要实现弹幕,网上参考了各种方法,最后觉得transform+transition实现的效果在移动设备上性能最好,在iphone6和红米4上测试,看不到 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • layui表格分页不生效怎么办
    web前端|Layui教程layuiweb前端-Layui教程小程序实例源码,ubuntuip切换,tomcat默认端改为80,爬虫完整源码,微信小程序php接口,seo专业培训班 ... [详细]
  • 小程序服务器获取用户名头像,微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现...
    这个接口只能获得一些非敏感信息,例如用户昵称,用户头像,经过用户授权允许获取的情况下即可获得用户信息,至于openid这些& ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • java io换行符_Java IO:为什么从stdin读取时,换行符的数字表示出现在控制台上?...
    只是为了更好地理解我在讲座中听到的内容(关于Java输入和输出流),我自己做了这个小程序:publicstaticvoidmain(String[]args)thro ... [详细]
author-avatar
AIHFKYH_986
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有