| <template> | 
|     <view class="u-circle-progress"> | 
|         <view class="u-circle-progress__left"> | 
|             <view | 
|                 class="u-circle-progress__left__circle" | 
|                 :style="[leftSyle]" | 
|                 ref="left-circle" | 
|             > | 
|   | 
|             </view> | 
|         </view> | 
|         <view | 
|             class="u-circle-progress__right" | 
|         > | 
|             <view | 
|                 class="u-circle-progress__right__circle" | 
|                 ref="right-circle" | 
|                 :style="[rightSyle]" | 
|             > | 
|   | 
|             </view> | 
|         </view> | 
|         <view class="u-circle-progress__circle"> | 
|   | 
|         </view> | 
|     </view> | 
| </template> | 
|   | 
| <script> | 
|     import props from './props.js'; | 
|     // #ifdef APP-NVUE | 
|     const animation = uni.requireNativePlugin('animation') | 
|     // #endif | 
|     /** | 
|      * CircleProgress 圆形进度条 TODO: 待完善  | 
|      * @description 展示操作或任务的当前进度,比如上传文件,是一个圆形的进度环。 | 
|      * @tutorial https://www.uviewui.com/components/circleProgress.html | 
|      * @property {String | Number}    percentage    圆环进度百分比值,为数值类型,0-100 (默认 30 ) | 
|      * @example | 
|      */ | 
|     export default { | 
|         name: 'u-circle-progress', | 
|         mixins: [uni.$u.mpMixin, uni.$u.mixin,props], | 
|         data() { | 
|             return { | 
|                 leftBorderColor: 'rgb(200, 200, 200)', | 
|                 rightBorderColor: 'rgb(200, 200, 200)', | 
|             } | 
|         }, | 
|         computed: { | 
|             leftSyle() { | 
|                 const style = {} | 
|                 style.borderTopColor = this.leftBorderColor | 
|                 style.borderRightColor = this.leftBorderColor | 
|                 return style | 
|             }, | 
|             rightSyle() { | 
|                 const style = {} | 
|                 style.borderLeftColor = this.rightBorderColor | 
|                 style.borderBottomColor = this.rightBorderColor | 
|                 return style | 
|             } | 
|         }, | 
|         mounted() { | 
|             uni.$u.sleep().then(() => { | 
|                 this.rightBorderColor = 'rgb(66, 185, 131)' | 
|                 // this.init() | 
|             }) | 
|         }, | 
|         methods: { | 
|             init() { | 
|                 animation.transition(this.$refs['right-circle'].ref, { | 
|                     styles: { | 
|                         transform: 'rotate(45deg)', | 
|                         transformOrigin: 'center center' | 
|                     }, | 
|                 }, () => { | 
|                     this.rightBorderColor = 'rgb(66, 185, 131)' | 
|                     // animation.transition(this.$refs['right-circle'].ref, { | 
|                     //     styles: { | 
|                     //         transform: 'rotate(225deg)', | 
|                     //         transformOrigin: 'center center' | 
|                     //     }, | 
|                     //     duration: 3000, | 
|                     // }, () => { | 
|                     //     animation.transition(this.$refs['left-circle'].ref, { | 
|                     //         styles: { | 
|                     //             transform: 'rotate(45deg)', | 
|                     //             transformOrigin: 'center center' | 
|                     //         }, | 
|                     //     }, () => { | 
|                     //         this.leftBorderColor = 'rgb(66, 185, 131)' | 
|                     //         animation.transition(this.$refs['left-circle'].ref, { | 
|                     //             styles: { | 
|                     //                 transform: 'rotate(225deg)', | 
|                     //                 transformOrigin: 'center center' | 
|                     //             }, | 
|                     //             duration: 1500, | 
|                     //         }, () => { | 
|   | 
|                     //         }) | 
|                     //     }) | 
|                     // }) | 
|                 }) | 
|   | 
|             } | 
|         }, | 
|     } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     @import "../../libs/css/components.scss"; | 
|   | 
|     .u-circle-progress { | 
|         @include flex(row); | 
|         position: relative; | 
|         border-radius: 100px; | 
|         height: 100px; | 
|         width: 100px; | 
|         // transform: rotate(0deg); | 
|         // background-color: rgb(66, 185, 131); | 
|         background-color: rgb(200, 200, 200); | 
|         overflow: hidden; | 
|         justify-content: space-between; | 
|   | 
|         &__circle { | 
|             border-radius: 100px; | 
|             height: 90px; | 
|             width: 90px; | 
|             transform: translate(-50%, -50%); | 
|             background-color: rgb(255, 255, 255); | 
|             left: 50px; | 
|             top: 50px; | 
|             position: absolute; | 
|         } | 
|   | 
|         &__left { | 
|             position: absolute; | 
|             left: 0; | 
|             width: 50px; | 
|             height: 100px; | 
|             overflow: hidden; | 
|             box-sizing: border-box; | 
|             // background-color: rgb(66, 185, 131); | 
|             // background-color: rgb(200, 200, 200); | 
|             // transform-origin: left center; | 
|   | 
|             &__circle { | 
|                 box-sizing: border-box; | 
|                 // background-color: red; | 
|                 border-left-color: transparent; | 
|                 border-bottom-color: transparent; | 
|                 border-top-left-radius: 50px; | 
|                 border-top-right-radius: 50px; | 
|                 border-bottom-right-radius: 50px; | 
|                 // border-left-color: rgb(66, 185, 131); | 
|                 // border-bottom-color: rgb(66, 185, 131); | 
|                 border-top-color: rgb(66, 185, 131); | 
|                 border-right-color: rgb(66, 185, 131); | 
|                 border-width: 5px; | 
|                 width: 100px; | 
|                 height: 100px; | 
|                 transform: rotate(225deg); | 
|                 // border-radius: 100px; | 
|             } | 
|         } | 
|   | 
|         &__right { | 
|             position: absolute; | 
|             right: 0; | 
|             width: 50px; | 
|             height: 100px; | 
|             overflow: hidden; | 
|   | 
|             &__circle { | 
|                 position: absolute; | 
|                 right: 0; | 
|                 box-sizing: border-box; | 
|                 // background-color: red; | 
|                 border-top-color: transparent; | 
|                 border-right-color: transparent; | 
|                 border-top-left-radius: 50px; | 
|                 border-bottom-left-radius: 50px; | 
|                 border-bottom-right-radius: 50px; | 
|                 // border-left-color: rgb(66, 185, 131); | 
|                 // border-bottom-color: rgb(66, 185, 131); | 
|                 border-left-color: rgb(200, 200, 200); | 
|                 border-bottom-color: rgb(200, 200, 200); | 
|                 border-width: 5px; | 
|                 width: 100px; | 
|                 height: 100px; | 
|                 transform: rotate(45deg); | 
|                 transform-origin: center center; | 
|                 // border-radius: 100px; | 
|             } | 
|         } | 
|     } | 
| </style> |