canvas绘制扫描图

先定义一个canvas

<div class="canFa">
          <canvas width="380" id="can3"></canvas>
        </div>

主要绘制函数

var chosHeight = document.getElementsByClassName("canFa")[0].children[0].clientHeight;
    var chosWidth = document.getElementsByClassName("canFa")[0].children[0].clientWidth;
    var threeHeight; //宽高对比选择
    if (chosHeight > chosWidth) {
      threeHeight = chosWidth;
    } else {
      threeHeight = chosHeight;
    }
    this.threeHeight = threeHeight;
    // canvas扫描盘
    this.leftCenterCanvas(threeHeight);
    
//threeHeight 就是canvas外层canFa的宽高对比,谁小用谁,为了让下面的canvas不超界
leftCenterCanvas(threeHeight) {
      var canvas3 = document.getElementById("can3");
      var ctx3 = canvas3.getContext("2d");
      var leftCenter = new Image();
      var sector = new Image();
      canvas3.height = threeHeight;
      leftCenter.src = this.leftCenter; //背景图
      sector.src = this.sector; //指针
      sector.width = 82;
      var CFG = {
        perDeg: 1
      };
      var deg = 0,
        scal = 0;
      leftCenter.onload = function() {
        scal = threeHeight / leftCenter.height;
        init();
      };

      // 重画重删 大概就是定义角度,位置然后绘制
      function init() {
        // ctx3.clearRect(0, 0,420,185)
        ctx3.clearRect(0, 0, 380, threeHeight);
        ctx3.save();
        // ctx3.drawImage(leftCenter,40,0)
        ctx3.drawImage(
          leftCenter,
          0,
          0,
          leftCenter.width,
          leftCenter.height,
          canvas3.width / 2 - (leftCenter.width * scal) / 2,
          0,
          leftCenter.width * scal,
          leftCenter.height * scal
        );
        ctx3.translate(190, (leftCenter.height * scal) / 2 + 4 * scal); //190是因为宽写的380/2
       
        ctx3.save();
        deg = deg + CFG.perDeg;
        ctx3.rotate((Math.PI / 180) * deg);

        // ctx3.drawImage(sector,0,-63)
        ctx3.drawImage(
          sector,
          0,
          0,
          sector.width,
          sector.width,
          0,
          -sector.width * scal,
          sector.width * scal,
          sector.width * scal
        );
        // -3*scal,-(-5+sector.width)*scal
        ctx3.restore();
        ctx3.restore();
        window.requestAnimationFrame(init);
      }
    },

底盘是张图
扫描针也是张图
这个函数主要是让扫描针定义到底盘中间,然后旋转,其实就是做个动画效果

 leftCenter: require("@/common/image/leftCenter.png"), //左下底盘
 sector: require("@/common/image/sector.png"), //左下扫描指针

效果大概这样
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值