// canvas测试数据ponent.html <div class="container"> <canvas #voucherCanvas width="100%" height="100%"></canvas> </div>
?
//自定义模板数据 canvas测试数据ponent.ts
import { Component, OnInit, ViewChild, ElementRef, Input } from '@angular/core' ;
@Component({
selector: 'app-canvas' ,
templateUrl: './canvas测试数据ponent.html' ,
styleUrls: [ './canvas测试数据ponent.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>
?
查看更多关于canvas渐变色圆环进度条(angular2)的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did222754