位置:首页 > web前端 > javascript

canvas实现文字圆形排列的方法

dearweb 发布:2021-10-21 15:07:06阅读:

canvas结合js实现文字圆形排列的方法;

效果预览

image.png

代码展示

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <canvas
      id="canvas"
      width="300"
      height="300"
      data-total="100"
      data-curr="75"
    ></canvas>
    <script>
      var canvas = document.getElementById('canvas')
      var ctx = canvas.getContext('2d')
      console.log(canvas.getContext)

      //转换弧度
      function rads(x) {
        return (Math.PI * x) / 180
      }
      function drawCircularText(s, string, startAngle, endAngle) {
        var radius = s.radius,
          angleDecrement =
            (startAngle - endAngle) / (string.length - 1),
          angle = parseFloat(startAngle),
          index = 0,
          character
        ctx.save()
        ctx.fillStyle = 'black'
        ctx.font = '30px 微软雅黑'
        ctx.textAlign = 'right'
        ctx.textBaseline = 'middle'
        while (index < string.length) {
          character = string.charAt(index)
          ctx.save()
          ctx.beginPath()
          ctx.translate(
            s.x + Math.cos(angle) * radius,
            s.y + Math.sin(angle) * radius
          )
          ctx.rotate(Math.PI / 2 + angle)
          ctx.fillText(character, 0, 0)
          angle -= angleDecrement
          index++
          ctx.restore()
        }
        ctx.restore()
      }
      ctx.textAlign = 'center'
      ctx.textBaseLine = 'middle'

      if (canvas.getContext) {
        var circle = {
          x: 150,
          y: 150,
          radius: 100,
        }
        drawCircularText(circle, '123456', Math.PI * 2, Math.PI / 3)
      }
      //第三个参数表示文字首位是否相接 差了多少弧度
    </script>
  </body>
</html>


24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看