小程序 canvas制作圆环倒计时

原文链接:https://blog.csdn.net/xjf18250534957/article/details/80094233
参考:https://www.jianshu.com/p/4ba43973903e

WXML代码:

<view class='main' style="background-color: #ccc;">
  <canvas style="width: 200px; height: 200px;" canvas-id="secondCanvas"></canvas>
</view>

JS代码:

/**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    var step = 1,//计数动画次数
      num = 0,//计数倒计时秒数(n - num)
      start = 1.5 * Math.PI,// 开始的弧度
      end = -0.5 * Math.PI,// 结束的弧度
      time = null;// 计时器容器

    var animation_interval = 1000,// 每1秒运行一次计时器
      n = 10; // 当前倒计时为10秒
    // 动画函数
    function animation() {
      if (step <= n) {
        end = end + 2 * Math.PI / n;
        ringMove(start, end);
        step++;
      } else {
        clearInterval(time);
      }
    };
    // 画布绘画函数
    function ringMove(s, e) {
      var context = wx.createCanvasContext('secondCanvas')

      // 绘制外圆环
      context.setLineWidth(16) //线条的宽度
      context.arc(100, 100, 90, 0, 2 * Math.PI) //x轴坐标50,y轴坐标50,半径42,Math.PI=180°
      context.setStrokeStyle('white') //描边的颜色
      context.stroke() //当前路径的边框
      
      // 绘制内圆环
      context.beginPath() //开始创建一个路径
      context.setLineCap('round') //设置线条端点样式
      context.setLineWidth(8)
      context.arc(100, 100, 90, s, e, true)
      context.setStrokeStyle('#6699ff')
      context.stroke()
   
      // 绘制倒计时文本
      context.beginPath()
      context.setLineWidth(1)
      context.setFontSize(60)
      context.setFillStyle('#333333')
      context.setTextAlign('center')
      context.setTextBaseline('middle')
      context.fillText(n - num + '', 100, 100, 100)
      context.fill()
      context.closePath()

      context.draw()

      // 每完成一次全程绘制就+1
      num++;
    }
    // 倒计时前先绘制整圆的圆环
    ringMove(start, end);
    // 创建倒计时m.h987yuitryuioihyhujik[jhgvfbnvnjmnbvbnm,nbvfcgklkjhg545545545u ]
    time = setInterval(animation, animation_interval);
  },

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用CanvasContext中的`arc()`和`fillText()`方法来实现倒计时的效果。具体实现步骤如下: 1. 首先获取到CanvasContext的实例: ```javascript const ctx = wx.createCanvasContext('myCanvas'); ``` 2. 然后通过`arc()`方法画出一个圆形的进度条: ```javascript ctx.beginPath(); ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise); ctx.stroke(); ``` 其中,`x`和`y`是圆心的坐标,`radius`是圆的半径,`startAngle`和`endAngle`是圆弧的起始角度和结束角度,`anticlockwise`表示是否按逆时针方向绘制。 3. 接着,使用`fillText()`方法在圆形中心位置显示倒计时的数字: ```javascript ctx.font = 'bold 24px Arial'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText(time, x, y); ``` 其中,`font`设置字体样式,`textAlign`设置文字水平居中,`textBaseline`设置文字垂直居中,`fillText()`方法的第一个参数是要显示的文本,第二个参数是文本的x轴坐标,第三个参数是文本的y轴坐标。 4. 最后,通过定时器来更新倒计时的时间和进度条的显示,实现倒计时效果。 ```javascript setInterval(() => { //更新倒计时时间 time--; //重新绘制圆形进度条和倒计时数字 drawProgress(time); }, 1000); ``` 完整的实现代码示例: ```javascript const ctx = wx.createCanvasContext('myCanvas'); const x = 50; //圆心x轴坐标 const y = 50; //圆心y轴坐标 const radius = 40; //圆的半径 let time = 60; //倒计时时间 function drawProgress(time) { //清空画布 ctx.clearRect(0, 0, 100, 100); //绘制底部圆形 ctx.beginPath(); ctx.arc(x, y, radius, 0, 2 * Math.PI); ctx.strokeStyle = '#ddd'; ctx.stroke(); //绘制进度条 const endAngle = (2 * Math.PI) * (60 - time) / 60 - 0.5 * Math.PI; ctx.beginPath(); ctx.arc(x, y, radius, -0.5 * Math.PI, endAngle); ctx.strokeStyle = '#f00'; ctx.stroke(); //绘制倒计时数字 ctx.font = 'bold 24px Arial'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText(time, x, y); } setInterval(() => { time--; drawProgress(time); }, 1000); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值