| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | <template name="graceCirProgress">	<view :style="{width:width+'px', height:width+'px'}">		<slot></slot>	</view></template><script>export default {	name: "graceCirProgress",	props: {		canvasId:{			type:String, 			default:'',		},		width : {			type : Number,			default : 200		},		lineWidth: {			type: Number,			default: 10		},		bgColor:{			type : String,			default : "#F1F1F1"		},		progressColor:{			type: String,			default: "#00C777"		},		fontColor: {			type: String,			default: "#00C777"		},		value : {			type : Number,			default : 0		},		fontSize : {			type: Number,			default: 30		},		speed : {			type : Number,			default : 20		}	},	data() {		return {			ctx : null,			sets : {},			oldVal : 0,			canvas : {}		}	},	created:function(){		var _self		 = this; 		var sets		 = {};		sets.center		 = this.width / 2; // 圆心		sets.lineWidth   = this.lineWidth; // 外层圆环宽		sets.r = (this.width / 2) - (sets.lineWidth / 2); // 背景半径 = 外层		sets.lineWidth2  = sets.lineWidth - 2; // 内层圆环宽		this.sets        = sets;		// 创建画布		this.ctx =  wx.createCanvasContext(this.canvasId);		this.drawAnimate(this.value);	},	watch:{		value(val, val2){			this.drawAnimate(val);		}	},	methods: {		drawAnimate: function (num){			var _self = this;			var step = 0;			if (_self.oldVal > num) {				for (var i = _self.oldVal; i >= num; i--) {					(function(i){setTimeout(function(){_self.draw(i);}, step);})(i);					step += _self.speed;				}			} else {				for (var i = _self.oldVal; i <= num; i++) {					(function(i){setTimeout(function(){_self.draw(i);}, step);})(i);					step += _self.speed;				}			}			_self.oldVal = num;		},		draw : function (num){			if (num < 0) { num = 0;}			if(num > 100){num = 100;}			// 背景圆			this.ctx.setLineWidth(this.sets.lineWidth);			this.ctx.setStrokeStyle(this.bgColor);			this.ctx.setLineCap('round');			this.ctx.beginPath();			this.ctx.arc(this.sets.center, this.sets.center, this.sets.r, 0, 2 * Math.PI, false);			this.ctx.stroke();			// 进度圆			this.ctx.setLineWidth(this.sets.lineWidth2);			this.ctx.setStrokeStyle(this.progressColor);			this.ctx.setLineCap('round')			this.ctx.beginPath();//开始一个新的路径			num = (num / 100);			this.ctx.arc(this.sets.center, this.sets.center, this.sets.r, 0 * Math.PI, num * 2 * Math.PI, false);			this.ctx.stroke();			// 文字			this.ctx.setFillStyle(this.fontColor);			this.ctx.setFontSize(this.fontSize);			this.ctx.setTextAlign("center");			this.ctx.setTextBaseline('middle');			this.ctx.fillText(Math.round(num * 100) + "%", this.sets.center, this.sets.center);						this.ctx.draw();		}	}}</script><style scoped></style>
 |