关于利用canvas画带箭头的直线旋转

本文介绍了如何在Vue.js项目中利用canvas API来绘制带有箭头的直线,并探讨了如何实现这些直线的旋转效果,为前端开发提供了一种实用的技术解决方案。

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

利用canvas在Vue项目中使用:

    <img
                        id="range_right"
                        src=""
                        style="
                          position: absolute;
                          left: 0px;
                          bottom: 0px;
                          width: 100%;
                          z-index: 2;
                        "
                      />
//图片上面箭头旋转直线
      GetArrow(eye_number) {
        var canvas = document.getElementById('canvas')
        var ctx = canvas.getContext('2d')
        var img = document.getElementById('arrow_right')
        var img2 = document.getElementById('range_left')
        canvas.width = 128
        canvas.height = 128
        var w = canvas.width
        var h = canvas.height
        ctx.clearRect(0, 0, w, h)
        angles = new Array(0, 30, 60, -90, -60, -30)
        index = eye_number - 1
        var urlData = this.DrawArrow(62, angles[index], true, 'green')
        var urlData = canvas.toDataURL('image/png')
        // img.src = urlData
        img.src = urlData
        img2.src = urlData
        return urlData
      },
      GetMutiArrow(eye_number) {
        var canvas = document.getElementById('canvas')
        var ctx = canvas.getContext('2d')
        canvas.width = 600
        canvas.height = 400
        var w = canvas.width
        var h = canvas.height
        ctx.clearRect(0, 0, w, h)
        angles = new Array(0, 30, 60, -90, -60, -30)
        for (index = 0; index < 6; index++) {
          this.color = 'blue'
          if (eye_number == index + 1) {
            this.color = 'red'
          }
          this.DrawArrow(156, angles[index], false, this.color, 1)
        }
        var urlData = canvas.toDataURL('image/png')

        return urlData
      },
      DrawArrow(value, angle, circle, color = 'blue', linewidth = 4) {
        var canvas = document.getElementById('canvas')
        var ctx = canvas.getContext('2d')
        var img = document.getElementById('range_right')
        var img2 = document.getElementById('arrow_left')
        var w = canvas.width
        var h = canvas.height
        ctx.save() //保存当前画布
        ctx.translate(w / 2, h / 2) //重新映射画布上的 (0,0) 位置。也就是画布的平移
        ctx.rotate((angle * Math.PI) / 180) //画布的旋转
        ctx.strokeStyle = color //颜色
        ctx.lineWidth = linewidth
        var centerX = 0
        var centerY = 0
        if (circle) {
          ctx.beginPath() //路径
          ctx.moveTo(centerX + value, centerX)
          ctx.arc(
            centerX,
            centerX,
            value,
            (0 * Math.PI) / 180, // 返回 1(0 度的余弦)
            (360 * Math.PI) / 180
          )
          ctx.stroke()
        }
        ctx.beginPath() //路径
        ctx.moveTo(centerX - value, centerY)
        ctx.lineTo(centerX + value, centerY)
        ctx.stroke()

        ctx.moveTo(centerX + value, centerY)
        ctx.lineTo(centerX + value - 30, centerY - 10)
        ctx.stroke()

        ctx.moveTo(centerX + value, centerY)
        ctx.lineTo(centerX + value - 30, centerY + 10)
        ctx.stroke()
        ctx.restore()
        var urlData = canvas.toDataURL('image/png')
        img.src = urlData
        img2.src = urlData
      },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值