zoukankan      html  css  js  c++  java
  • canvas渐变色圆环进度条(angular2)

    //canvas.component.html
    <div class="container">
      <canvas #voucherCanvas width="100%" height="100%"></canvas>
    </div>
    //自定义模板数据 canvas.component.ts
    import { Component, OnInit, ViewChild, ElementRef, Input } from '@angular/core';
    
    @Component({
      selector: 'app-canvas',
      templateUrl: './canvas.component.html',
      styleUrls: ['./canvas.component.scss']
    })
    export class BusinessCanvasComponent implements OnInit {
      @ViewChild('voucherCanvas')
      voucherCanvas: ElementRef;
    
      constructor(
        public element: ElementRef
      ) { }
    
      ngOnInit() {
        //自定义模板数据
        this.voucher: any = {
            totalDta: 800,
            currentDta: 100,
        };
        /**
        *  arc(x, y, radius, startAngle, endAngle, anticlockwise)
        *  画一个以(x,y)为圆心的以radius为半径的圆弧(圆),从startAngle开始到endAngle结束,按照anticlockwise给定的方向(默认为顺时针true/false)来生成。
        */
        this.drawCanvanPercent(this.voucher);
      }
    
      drawCanvanPercent(voucher): void {
        const canvas = this.voucherCanvas.nativeElement;
        if (canvas.getContext) {
          const ctx: any = canvas.getContext('2d');
          // 画笔设置
          ctx.strokeStyle = "#E7F3FE";
          ctx.lineWidth = '10'; 
          ctx.lineCap = 'round';
          // 灰色圆环
          ctx.beginPath();
          ctx.arc(50, 50, 40, (Math.PI / 180) * 0, (Math.PI / 180) * 360, false);
          ctx.stroke();
          ctx.closePath();
          // 红色比例圆环
          const text = Math.round((voucher.currentDta / voucher.totalDta) * Math.pow(10, 4)) / Math.pow(10, 4) * 100; //圆环内部展示进度值
          this.drawArc(this.voucher, ctx, text);
        } else {
          console.log('此浏览器不支持展示canvas');
        }
      }
    
      // 根据角度比例画圆弧
      drawArc(voucher, ctx, text) {
        const startAngle = -90;
        const endAngle = (voucher.currentDta / voucher.totalDta) * 360 - 90;
        ctx.beginPath();
        ctx.arc(50, 50, 40, (Math.PI / 180) * startAngle, (Math.PI / 180) * endAngle, flase);
        // color
      /*
      *createLinearGradient(x1, y1, x2, y2)
      *createLinearGradient 方法接受 4 个参数,表示渐变的起点 (x1,y1) 与终点 (x2,y2)。
      */
    const g = ctx.createLinearGradient(50, 10, 50, 90); g.addColorStop(0, '#F76B1C'); //开始颜色 g.addColorStop(1, '#FAD760'); //结束颜色 ctx.strokeStyle = g; ctx.stroke(); ctx.closePath(); // tag 给进度值拼接上% text = `${text}` + '%'; const myText = ctx.measureText(text); ctx.font = '14px DINOT-Medium '; ctx.fillStyle = 'rgba(0,0,0,0.25)'; ctx.fillText(text, (this.voucher.width - myText.width) / 2 - 5, this.voucher.height / 2 + 5); } }
    //主页面
    <app-canvas></app-canvas>
  • 相关阅读:
    静态代码块、非静态代码块、构造函数之间的执行顺序
    Linux跨主机传输文件
    🗒 Linux 系统监控
    Mysql Mode
    Mysql 表锁行锁
    Centos 下修改时区
    Redis 解决内存过大
    Mysql 表达式
    Centos 二进制包安装Mysql5.7
    Vim 快捷键
  • 原文地址:https://www.cnblogs.com/lskzj/p/10472488.html
Copyright © 2011-2022 走看看