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