canvas 手写环形进度条

本文详细介绍了如何利用HTML5的canvas元素创建一个手写风格的环形进度条,结合JavaScript实现动态更新进度的功能。通过设置路径、渐变色等技巧,打造了一款视觉效果出色的进度指示器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
  <a-card :bordered="false">
    <a-row>
      <a-col :span="12">
        <canvas id="canvas" width="500px" height="500px">您的浏览器版本过低</canvas>
      </a-col>
    </a-row>
  </a-card>
</template>

<script>
export default {
  name: 'Canvas',
  computed: {},
  mounted() {
    this.init()
  },
  methods: {
    init() {
      // 画 环形进度条
      var canvas = document.getElementById('canvas')
      var c = canvas.getContext('2d')
      let currentDeg = 0 // 度从0开始

      // 先绘制背景,这里只绘制一次
      drawCircle()
      drawArc(currentDeg++)

      function drawArc(deg) {
        // 计算deg次时的结束角度
        const to = (Math.PI / 180) * deg
        c.beginPath()
        c.lineWidth = 14
        // 设置线头的样式为圆头,默认是方形(不圆润)
        c.lineCap = 'round'
        var g = c.createLinearGradient(170, 50, 60, 100, 100, 100) // 创建渐变对象  渐变开始点和渐变结束点
        g.addColorStop(0, '#0053e1') // 添加颜色点
        g.addColorStop(1, '#00fafb') // 添加颜色点
        var coverColor = g
        c.strokeStyle = coverColor
        c.arc(200, 200, 80, Math.PI * 0.75, to + Math.PI * 0.75, false)
        // 清空画布上的文字,这里不是清除整个画布哦
        c.clearRect(180, 180, 50, 50)
        c.font = '18px serif'
        const text = ((currentDeg / 270) * 100).toFixed(0) + '%'
        c.fillText(text, 185, 200)
        c.stroke()
        c.closePath()
        if (currentDeg <= Math.PI * (1 + 0.25 - 0.75) * (180 / Math.PI)) {
          setTimeout(function() {
            drawArc(currentDeg++)
          }, 10)
        }
      }

      function drawCircle() {
        c.beginPath()
        c.lineWidth = 14
        c.lineCap = 'round'
        c.strokeStyle = '#ccc'
        c.arc(200, 200, 80, Math.PI * 0.75, Math.PI * 0.25, false)
        c.stroke()
        c.closePath()
      }
    }
  }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值