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