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