返回顶部
首页 > 资讯 > 精选 >微信小程序怎么实现圆心进度条
  • 338
分享到

微信小程序怎么实现圆心进度条

2023-07-02 14:07:59 338人浏览 安东尼
摘要

这篇文章主要介绍“微信小程序怎么实现圆心进度条”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现圆心进度条”文章能帮助大家解决问题。一、创建项目结构打开微信开发者工具创建一个项目, 新

这篇文章主要介绍“微信小程序怎么实现圆心进度条”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现圆心进度条”文章能帮助大家解决问题。

一、创建项目结构

打开微信开发工具创建一个项目, 新建 与 pages 同级目录 components,在 components 中新建一个目录 circle ,circle 中新建 Component 命名为 circle,此时将自动生成 JSON、wxml、wxss、js 4 个文件。结构如下:

微信小程序怎么实现圆心进度条

二、编写组件

首先需要在 json 文件中进行自定义组件声明(将 component 字段设为 true,可将这一组文件设为自定义组件)。

{"component": true}

同时,还要在 wxml 文件中编写组件模版,在 wxss 文件中加入组件样式,这里编写圆环进度条的模板和样式,参见微信小程序之圆形进度条。

要注意 canvas 绘制的是 px 为单位的,所以这里统一用 px 单位;其中 size 是根据 canvas 绘制的圆环的直径,后面在 js 中会提到。

在组件的 wxml 中可以包含 slot 节点,用于承载组件使用者提供的 wxml 结构。

<!-- components/circle/circle.wxml --><view class="circle_box" >          <canvas class="circle_bg" canvas-id="{{bg}}" ></canvas>           <canvas class="circle_draw" canvas-id="{{draw}}" ></canvas>           <slot></slot> </view>

注意:在组件 wxss 中不应使用 ID 选择器、属性选择器和标签名选择器。

.circle_box,.circle_draw{ position: relative; }.circle_bg{position: absolute;}

编写 js

在自定义组件的 js 文件中,需要使用 Component() 来注册组件,并提供组件的属性定义、内部数据和自定义方法。

组件的属性值和内部数据将被用于组件 wxml 的渲染,其中,属性值是可由组件外部传入的。更多细节参考 Component 构造器。

Component({  ……  methods: {        drawCircleBg: function (id, x, w) {      // 设置圆环外面盒子大小 宽高都等于圆环直径      this.setData({        size: 2 * x      });      // 使用 wx.createContext 获取绘图上下文 ctx  绘制背景圆环      var ctx = wx.createCanvasContext(id)      ctx.setLineWidth(w / 2); ctx.setStrokeStyle('#20183b'); ctx.setLineCap('round')      ctx.beginPath();//开始一个新的路径      //设置一个原点(x,y),半径为r的圆的路径到当前路径 此处x=y=r      ctx.arc(x, x, x - w, 0, 2 * Math.PI, false);      ctx.stroke();//对当前路径进行描边      ctx.draw();    },    drawCircle: function (id, x, w, step) {      // 使用 wx.createContext 获取绘图上下文 context  绘制彩色进度条圆环      var context = wx.createCanvasContext(id);      // 设置渐变      var gradient = context.createLinearGradient(2 * x, x, 0);      gradient.addColorStop("0", "#2661DD"); gradient.addColorStop("0.5", "#40ED94"); gradient.addColorStop("1.0", "#5956CC");      context.setLineWidth(w); context.setStrokeStyle(gradient); context.setLineCap('round')      context.beginPath();//开始一个新的路径      // step 从0到2为一周      context.arc(x, x, x - w, -Math.PI / 2, step * Math.PI - Math.PI / 2, false);      context.stroke();//对当前路径进行描边      context.draw()    },    _runEvent() {      //触发自定义组件事件      this.triggerEvent("runEvent")    }  },  ……})

自定义组件圆形进度条到此已经完成。

使用自定义组件

下面我们在 index 中使用自定义组件圆形进度条。

一、json 文件中进行引用声明

使用已注册的自定义组件前,首先要在页面的 json 文件中进行引用声明。此时需要提供每个自定义组件的标签名和对应的自定义组件文件路径:

{  "usinGComponents": {    "circle": "/components/circle/circle"  }}

二、wxml 文件中使用自定义组件

这样,在页面的 wxml 中就可以像使用基础组件一样使用自定义组件。节点名即自定义组件的标签名,节点属性即传递给组件的属性值。

  • 节点名即自定义组件的标签名:circle;

  • 节点属性即传递给组件的属性值:bg,draw;

  • 当自定义组件触发 runEvent 事件时,调用_runEvent 方法。

<!--index.wxml--><view class="container">    <circle id='circle1'      bg='circle_bg1'      draw='circle_draw1'      bind:runEvent="_runEvent" >        <!-- 这部分内容将被放置在组件 <slot> 的位置上 -->        <view class="circle_info" bindtap="changeTime">             <view class="circle_dot"></view>             <text class='circle_txt'> {{txt}} </text>       </view>    </circle></view>

自定义组件的 wxml 节点结构在与数据结合之后,将被插入到引用位置内。在 wxss 给 slot 位置上的内容添加一些样式。

.circle_info{  position: absolute;   width: 100%;  left: 50%;  top: 50%;   transfORM: translate(-50%,-50%);   display: flex;    align-items: center;  justify-content: center}.circle_dot{  width:16rpx;  height: 16rpx;    border-radius: 50%;  background-color: #fb9126;} .circle_txt{  padding-left: 10rpx;  color: #fff;  font-size: 36rpx;   letter-spacing: 2rpx;}

三、js 文件中调用自定义组件中的方法

在 wxml 中我们用到一个数据 {{txt}},我们需要在 js 中设置一下 data,然后在 onReady 中使用 selectComponent 选择组件实例节点。

//index.js data: {     txt: "正在匹配中..."   }, onReady: function () {   // 获得circle组件    this.circle = this.selectComponent("#circle1");    // 绘制背景圆环    this.circle.drawCircleBg('circle_bg1', 100, 8)    // 绘制彩色圆环     this.circle.drawCircle('circle_draw1', 100, 8, 2);    },

效果如下:

this.circle.drawCircle('circle_draw1', 100, 8, 0.5);

微信小程序怎么实现圆心进度条

this.circle.drawCircle('circle_draw1', 100, 8, 1);

微信小程序怎么实现圆心进度条

this.circle.drawCircle('circle_draw1', 100, 8, 2);

微信小程序怎么实现圆心进度条

接下来要写定时器方法了,在定时器中每隔一段时间调用一次 this.circle.drawCircle(id, x, w, step),通过改变 step 的值来动态绘制圆环。

在 data 中设置几个初始值
2.定义一个定时器方法 countInterval,假设每隔 100 毫秒 count 递增
+1,当 count 递增到 100 的时候刚好是一个圆环,然后改变 txt 值并且清除定时器
3.在 onReady 中调用这个定时器方法

data: {     txt: "正在匹配中...",    count: 0,//计数器,初始值为0    maxCount: 100, // 绘制一个圆环所需的步骤     countTimer: null,//定时器,初始值为null  },   countInterval: function () {    // 设置倒计时 定时器 假设每隔100毫秒 count递增+1,当 count递增到两倍maxCount的时候刚好是一个圆环( step 从0到2为一周),然后改变txt值并且清除定时器    this.countTimer = setInterval(() => {         if (this.data.count <= 2 * this.data.maxCount) {                // 绘制彩色圆环进度条        this.circle.drawCircle('circle_draw1', 100, 8, this.data.count / this.data.maxCount)        this.data.count++;        } else {        this.setData({          txt: "匹配成功"        });         clearInterval(this.countTimer);       }    }, 100)  }, onReady: function () {   // 获得circle组件    this.circle = this.selectComponent("#circle1");    // 绘制背景圆环    this.circle.drawCircleBg('circle_bg1', 100, 8)    // 绘制彩色圆环     // this.circle.drawCircle('circle_draw1', 100, 8, 2);      this.countInterval()  },

最终效果

微信小程序怎么实现圆心进度条

再次使用自定义组件做倒计时

count 可以递增,当然可以递减。这里就不在赘述,直接上代码:

wxml

<circle id='circle'bg='circle_bg'draw='circle_draw'bind:runEvent="_runEvent" >  <view class="circle_text" bindtap="changeTime">  <text class='circle_time'> {{time}} s</text></view></circle>

wxss

.circle_text{position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);}.circle_time{color: #fff;font-size: 32rpx;padding-left: 16rpx;}

js

const app = getApp()Page({  ……  stepInterval: function () {    var n = this.data.num / 2  // 设置倒计时 定时器    this.stepTimer = setInterval(() => {      if (this.data.num >= 0) {        this.data.step = this.data.num / n;        this.circle.drawCircle('circle_draw', 40, 4, this.data.step)// 绘制彩色圆环进度条        if ((/(^[1-9]\d*$)/.test(this.data.num / 10))) {          this.setData({ // 当时间为整数秒的时候 改变时间            time: this.data.num / 10          });        }        this.data.num--;      } else {        this.setData({          time: 0        });      }    }, 100)  },  changeTime: function () {    clearInterval(this.stepTimer);    this.setData({      num: 100    });    this.stepInterval() // 重新开启倒计时    this._runEvent() // 触发自定义组件事件  },  ……})

最终效果

微信小程序怎么实现圆心进度条

关于“微信小程序怎么实现圆心进度条”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: 微信小程序怎么实现圆心进度条

本文链接: https://lsjlt.com/news/342393.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 微信小程序实现圆心进度条
    本文实例为大家分享了微信小程序实现圆心进度条的具体代码,供大家参考,具体内容如下 一、创建项目结构 打开微信开发者工具创建一个项目, 新建 与 pages 同级目录 componen...
    99+
    2024-04-02
  • 微信小程序怎么实现圆心进度条
    这篇文章主要介绍“微信小程序怎么实现圆心进度条”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现圆心进度条”文章能帮助大家解决问题。一、创建项目结构打开微信开发者工具创建一个项目, 新...
    99+
    2023-07-02
  • 微信小程序用canvas实现圆形进度条
    本文实例为大家分享了微信小程序用canvas实现圆形进度条的具体代码,供大家参考,具体内容如下 先放效果图,如下: 1. wxml文件代码如下 对于圆形进度条中间的文字,如果是简单...
    99+
    2024-04-02
  • 微信小程序中如何实现圆形进度条
    这篇文章主要为大家展示了“微信小程序中如何实现圆形进度条”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序中如何实现圆形进度条”这篇文章吧。需求概要小程序...
    99+
    2024-04-02
  • 微信小程序进度条怎么实现
    这篇文章主要介绍“微信小程序进度条怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序进度条怎么实现”文章能帮助大家解决问题。progress进度条。属性名类型默认值说明percentF...
    99+
    2023-06-26
  • 微信小程序如何实现实时圆形进度条
    这篇文章主要为大家展示了“微信小程序如何实现实时圆形进度条”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序如何实现实时圆形进度条”这篇文章吧。效果图如下...
    99+
    2024-04-02
  • 微信小程序怎么实现环形进度条
    本篇内容主要讲解“微信小程序怎么实现环形进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序怎么实现环形进度条”吧!index.wxss.circle { &nbs...
    99+
    2023-07-02
  • 微信小程序实现环形进度条
    本文实例为大家分享了微信小程序实现环形进度条的具体代码,供大家参考,具体内容如下 index.wxss .circle {   position: absolute;   left:...
    99+
    2024-04-02
  • 微信小程序怎样实现下载进度条
    这篇文章主要介绍了微信小程序怎样实现下载进度条,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果:progress进度条是微信小程序的组件,...
    99+
    2024-04-02
  • 微信小程序怎么实现带滑块的进度条
    今天小编给大家分享一下微信小程序怎么实现带滑块的进度条的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、效果图二、实现逻辑功...
    99+
    2023-07-02
  • 微信小程序实现带滑块的进度条
    微信小程序项目需求,要实现一个带滑块并可左右滑动的进度条,看了小程序的文档,发现上面的progress组件无法满足需求,所以我自己写了一个,在这里总结一下。 一、效果图 二、实现逻...
    99+
    2024-04-02
  • 微信小程序怎么使用slider实现音频进度条
    这篇文章主要介绍了微信小程序怎么使用slider实现音频进度条的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么使用slider实现音频进度条文章都会有所收获,下面我们一起来看看吧。微信小程序的sli...
    99+
    2023-07-02
  • 微信小程序使用slider实现音频进度条
    众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所以就想到了用slider来实现音频的进度条显示及控制 微信小程序的slider组件...
    99+
    2024-04-02
  • 小程序圆形进度条及面积图实现的方法
    目录前言效果预览圆形进度条说明:面积图最后前言 以下两个图可以用来展示完成进度或者进度详情,图1用的是css来绘制进度条,图2用canvas来绘制面积图。 效果预览 圆形进度条 传...
    99+
    2024-04-02
  • 小程序怎么实现流程进度条功能
    今天小编给大家分享一下小程序怎么实现流程进度条功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现小程序流程进度条需求:没...
    99+
    2023-06-26
  • android圆形进度条怎么实现
    要实现一个圆形进度条,你可以使用`ProgressBar`控件来实现,并将其样式设置为圆形。首先,在布局文件中添加以下代码:```x...
    99+
    2023-08-30
    android
  • java圆形进度条怎么实现
    以下是一个简单的Java圆形进度条的实现代码:import java.awt.Color;import java.awt.Dimen...
    99+
    2023-05-13
    java圆形进度条 java
  • MFC圆形进度条怎么实现
    MFC(Microsoft Foundation Class)是用于开发Windows应用程序的一套类库。要实现MFC圆形进度条,可...
    99+
    2023-08-20
    MFC
  • 微信小程序怎么实现滚动条功能
    这篇文章主要讲解了“微信小程序怎么实现滚动条功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序怎么实现滚动条功能”吧!view<view class="c...
    99+
    2023-07-02
  • 微信小程序实现滚动条功能
    本文实例为大家分享了微信小程序实现滚动条的具体代码,供大家参考,具体内容如下 view <view class="conty">   <!-- 滚动字幕 --&g...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作