| 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>
 
 
  |