carousel 轮播自定义进度条
<!-- Vue SFC --> <template> <div class="propor-box"> <div class="p20"> <div> <el-carousel :interval="5000" arrow="always" height="250px"> <el-carousel-item v-for="item in totalPages" :key="item"> <div> <div v-for="(i, index) in carouselPageFn(item)" :key="index"> <div class="flexba"> <span>{{ i.name }}</span> <span>{{ i.count }}</span> </div> <div class="mb10"> <div class="base_information"> <div class="tixing"> <div class="tixing_text tixing-back3" :style="{ width: (i.count / 100) * 100 + '%', }" ></div> </div> </div> </div> </div> </div> </el-carousel-item> </el-carousel> </div> </div> </div> </template> <script> export default { name: "", components: {}, data () { return { FormData: {}, baseList: [ { name: '实例1', count: 50 }, { name: '实例2', count: 10 }, { name: '实例3', count: 90 }, { name: '实例4', count: 40 }, { name: '实例4', count: 40 }, { name: '实例4', count: 40 }, { name: '实例4', count: 40 }, { name: '实例4', count: 40 }, { name: '实例4', count: 40 }, { name: '实例4', count: 40 }, { name: '实例4', count: 40 }, { name: '实例4', count: 20 }, { name: '实例4', count: 10 }, ], pageSize: 4, type: 1, }; }, created () { }, mounted () { }, computed: { totalPages () { return Math.ceil(this.baseList.length / this.pageSize); }, }, methods: { getData (row) { this.FormData = row; this.baseList = row.baseList; }, carouselPageFn (page) { const start = (page - 1) * this.pageSize; const end = start + this.pageSize; return this.baseList.slice(start, end); }, }, }; </script> <style lang="scss" scoped> .propor-box { box-sizing: border-box; // position: absolute; // bottom: 10px; // left: 0; width: 100%; } .icon_transform { transform: rotate(90deg); } .tabs_class { background-color: #484c6f; color: #fff; padding: 10px 20px; border-radius: 10px; } .tabs_class1 { background-color: #484c6f; color: #fff; padding: 10px 20px; border-radius: 10px; margin-left: -12px; } .tabs_bgc { background-color: #0088fe; z-index: 100; } /deep/.el-carousel--horizontal { overflow-y: hidden; } /deep/.el-carousel__arrow { top: 235px; background-color: #313359 !important; width: 20px !important; height: 20px !important; } /deep/ .el-carousel__indicator--horizontal .el-carousel__button { width: 10px; height: 10px; background: #616775; border: 1px solid 616775; border-radius: 50%; opacity: 0.5; } /deep/ .el-carousel__indicator--horizontal.is-active .el-carousel__button { width: 10px; height: 10px; background: #5d93ed; border-radius: 50%; opacity: 1; } /deep/.el-progress__text { margin-left: 20px; color: #dedee4; } .base_information { width: 100%; height: 10px; background-color: #424c65; border-radius: 5px; } .tixing { position: relative; width: 100%; height: 10px; line-height: 10px; background-color: #303462; border-radius: 6px; overflow: hidden; .tixing_text { position: absolute; left: 0; top: 0; z-index: 10; border-radius: 5px; height: 100%; } .tixing-pro { color: #fff; padding-left: 10px; border-radius: 6px; overflow: hidden; } .tixing-back0 { background-color: #7948ea; } .tixing-back1 { background-color: #00baad; } .tixing-back2 { background-color: #3478ef; } .tixing-back3 { background-color: #3478ef; } .tixing-num { position: absolute; right: 0; top: 0; z-index: 10; padding-right: 30px; } } </style>