| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 | 
							- 'use strict';
 
- Object.defineProperty(exports, '__esModule', { value: true });
 
- var color_1 = require('../common/color');
 
- var component_1 = require('../common/component');
 
- var utils_1 = require('../common/utils');
 
- var validator_1 = require('../common/validator');
 
- var version_1 = require('../common/version');
 
- var canvas_1 = require('./canvas');
 
- function format(rate) {
 
-   return Math.min(Math.max(rate, 0), 100);
 
- }
 
- var PERIMETER = 2 * Math.PI;
 
- var BEGIN_ANGLE = -Math.PI / 2;
 
- var STEP = 1;
 
- component_1.VantComponent({
 
-   props: {
 
-     text: String,
 
-     lineCap: {
 
-       type: String,
 
-       value: 'round',
 
-     },
 
-     value: {
 
-       type: Number,
 
-       value: 0,
 
-       observer: 'reRender',
 
-     },
 
-     speed: {
 
-       type: Number,
 
-       value: 50,
 
-     },
 
-     size: {
 
-       type: Number,
 
-       value: 100,
 
-       observer: function () {
 
-         this.drawCircle(this.currentValue);
 
-       },
 
-     },
 
-     fill: String,
 
-     layerColor: {
 
-       type: String,
 
-       value: color_1.WHITE,
 
-     },
 
-     color: {
 
-       type: null,
 
-       value: color_1.BLUE,
 
-       observer: function () {
 
-         var _this = this;
 
-         this.setHoverColor().then(function () {
 
-           _this.drawCircle(_this.currentValue);
 
-         });
 
-       },
 
-     },
 
-     type: {
 
-       type: String,
 
-       value: '',
 
-     },
 
-     strokeWidth: {
 
-       type: Number,
 
-       value: 4,
 
-     },
 
-     clockwise: {
 
-       type: Boolean,
 
-       value: true,
 
-     },
 
-   },
 
-   data: {
 
-     hoverColor: color_1.BLUE,
 
-   },
 
-   methods: {
 
-     getContext: function () {
 
-       var _this = this;
 
-       var _a = this.data,
 
-         type = _a.type,
 
-         size = _a.size;
 
-       if (type === '' || !version_1.canIUseCanvas2d()) {
 
-         var ctx = wx.createCanvasContext('van-circle', this);
 
-         return Promise.resolve(ctx);
 
-       }
 
-       var dpr = utils_1.getSystemInfoSync().pixelRatio;
 
-       return new Promise(function (resolve) {
 
-         wx.createSelectorQuery()
 
-           .in(_this)
 
-           .select('#van-circle')
 
-           .node()
 
-           .exec(function (res) {
 
-             var canvas = res[0].node;
 
-             var ctx = canvas.getContext(type);
 
-             if (!_this.inited) {
 
-               _this.inited = true;
 
-               canvas.width = size * dpr;
 
-               canvas.height = size * dpr;
 
-               ctx.scale(dpr, dpr);
 
-             }
 
-             resolve(canvas_1.adaptor(ctx));
 
-           });
 
-       });
 
-     },
 
-     setHoverColor: function () {
 
-       var _this = this;
 
-       var _a = this.data,
 
-         color = _a.color,
 
-         size = _a.size;
 
-       if (validator_1.isObj(color)) {
 
-         return this.getContext().then(function (context) {
 
-           var LinearColor = context.createLinearGradient(size, 0, 0, 0);
 
-           Object.keys(color)
 
-             .sort(function (a, b) {
 
-               return parseFloat(a) - parseFloat(b);
 
-             })
 
-             .map(function (key) {
 
-               return LinearColor.addColorStop(
 
-                 parseFloat(key) / 100,
 
-                 color[key]
 
-               );
 
-             });
 
-           _this.hoverColor = LinearColor;
 
-         });
 
-       }
 
-       this.hoverColor = color;
 
-       return Promise.resolve();
 
-     },
 
-     presetCanvas: function (context, strokeStyle, beginAngle, endAngle, fill) {
 
-       var _a = this.data,
 
-         strokeWidth = _a.strokeWidth,
 
-         lineCap = _a.lineCap,
 
-         clockwise = _a.clockwise,
 
-         size = _a.size;
 
-       var position = size / 2;
 
-       var radius = position - strokeWidth / 2;
 
-       context.setStrokeStyle(strokeStyle);
 
-       context.setLineWidth(strokeWidth);
 
-       context.setLineCap(lineCap);
 
-       context.beginPath();
 
-       context.arc(position, position, radius, beginAngle, endAngle, !clockwise);
 
-       context.stroke();
 
-       if (fill) {
 
-         context.setFillStyle(fill);
 
-         context.fill();
 
-       }
 
-     },
 
-     renderLayerCircle: function (context) {
 
-       var _a = this.data,
 
-         layerColor = _a.layerColor,
 
-         fill = _a.fill;
 
-       this.presetCanvas(context, layerColor, 0, PERIMETER, fill);
 
-     },
 
-     renderHoverCircle: function (context, formatValue) {
 
-       var clockwise = this.data.clockwise;
 
-       // 结束角度
 
-       var progress = PERIMETER * (formatValue / 100);
 
-       var endAngle = clockwise
 
-         ? BEGIN_ANGLE + progress
 
-         : 3 * Math.PI - (BEGIN_ANGLE + progress);
 
-       this.presetCanvas(context, this.hoverColor, BEGIN_ANGLE, endAngle);
 
-     },
 
-     drawCircle: function (currentValue) {
 
-       var _this = this;
 
-       var size = this.data.size;
 
-       this.getContext().then(function (context) {
 
-         context.clearRect(0, 0, size, size);
 
-         _this.renderLayerCircle(context);
 
-         var formatValue = format(currentValue);
 
-         if (formatValue !== 0) {
 
-           _this.renderHoverCircle(context, formatValue);
 
-         }
 
-         context.draw();
 
-       });
 
-     },
 
-     reRender: function () {
 
-       var _this = this;
 
-       // tofector 动画暂时没有想到好的解决方案
 
-       var _a = this.data,
 
-         value = _a.value,
 
-         speed = _a.speed;
 
-       if (speed <= 0 || speed > 1000) {
 
-         this.drawCircle(value);
 
-         return;
 
-       }
 
-       this.clearMockInterval();
 
-       this.currentValue = this.currentValue || 0;
 
-       var run = function () {
 
-         _this.interval = setTimeout(function () {
 
-           if (_this.currentValue !== value) {
 
-             if (Math.abs(_this.currentValue - value) < STEP) {
 
-               _this.currentValue = value;
 
-             } else if (_this.currentValue < value) {
 
-               _this.currentValue += STEP;
 
-             } else {
 
-               _this.currentValue -= STEP;
 
-             }
 
-             _this.drawCircle(_this.currentValue);
 
-             run();
 
-           } else {
 
-             _this.clearMockInterval();
 
-           }
 
-         }, 1000 / speed);
 
-       };
 
-       run();
 
-     },
 
-     clearMockInterval: function () {
 
-       if (this.interval) {
 
-         clearTimeout(this.interval);
 
-         this.interval = null;
 
-       }
 
-     },
 
-   },
 
-   mounted: function () {
 
-     var _this = this;
 
-     this.currentValue = this.data.value;
 
-     this.setHoverColor().then(function () {
 
-       _this.drawCircle(_this.currentValue);
 
-     });
 
-   },
 
-   destroyed: function () {
 
-     this.clearMockInterval();
 
-   },
 
- });
 
 
  |