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