|
|
- <template>
- <view class="view"
- :style="style"
- >
- <view class="bar bg">
- <view
- v-for="(item, index) in list"
- :key="index"
- :class="['bar-item', index % 2 == 0 ? 'is-active' : '']"
- ></view>
- </view>
- <view class="bar fg">
- <view
- v-for="(item, index) in fgList"
- :key="index"
- :class="['bar-item', index % 2 == 0 ? 'is-active' : '']"
- ></view>
- </view>
- </view>
- </template>
-
- <script>
- export default {
- props: {
- progress: {
- type: Number,
- default: 0,
- },
- activeColor: {
- type: String,
- default: '#7451DE',
- },
- },
- data() {
- return {
- list: new Array(51).fill(1),
- }
- },
- computed: {
- fgList() {
- const num = Math.floor(51 * this.progress / 100)
-
- return this.list.slice(0, num + 1)
- },
- style() {
- return `--color: ${this.activeColor}`
- }
- },
- }
- </script>
-
- <style lang="scss" scoped>
-
- .view {
- position: relative;
- width: 100%;
- height: 28rpx;
- }
-
- .bar {
- width: 100%;
- height: 28rpx;
- display: grid;
- grid-template-columns: repeat(51, 1fr);
-
- &-item {
- }
-
- &.bg {
- .is-active {
- background: #989898;
- }
- }
-
- &.fg {
- position: absolute;
- top: 0;
- left: 0;
-
- .is-active {
- background: #7451DE;
- background: var(--color);
- }
- }
- }
- </style>
|