【Vue】自己编写排名组件
一、需求分析
这里我是用Echarts的柱状图,倒置下y轴x轴就实现了,然后产品说跟UI不一致
我一看UI这种又给我整不会了,然后想拿Echarts改改参数搞定,同事和群友都是说自己做,不要用Echarts改

二、实现思路
同事劝我用ElementUI的进度条组件来实现,进度条见:
https://element.eleme.io/#/zh-CN/component/progress
想了下这个思路还是可行的,上面的标题自定义起来还算方便
然后花了点时间抓的进度条的样式
组件解析后是这样的:
<div class="el-progress-bar">
<div class="el-progress-bar__outer" style="height: 20px; background-color: rgb(235, 238, 245);">
<div class="el-progress-bar__inner" style="width: 44%; background-color: rgb(27, 189, 236);"></div>
</div>
</div>
一个bar嵌套 一个outer和inner
outer就是百分百的长度,outer是相对定位
inner用来展示占比的长度,inner是绝对定位
所以在做UI效果的时候花了很多时间琢磨这个东西,outer来设置底部边框线
然后想通过设置外边距和内边距来拉开inner的间隙,在知道是绝对定位后,改用top定位属性才拉开
这里我直接上效果图:

自己封装的RankCharts组件:
<template>
<div>
<div v-for="(item, idx) in rankList" :key="idx" style="margin-bottom: 15px;">
<div class="rank-header"><span>No.{{ idx + 1 }} {{ item[labelField] }}</span> <span style="float: right">{{ item[countField] }}</span></div>
<el-progress :percentage="item.percent" :stroke-width="15" :color="customColor" text-inside :show-text="false" />
</div>
</div>
</template> <script>
export default {
name: 'RankCharts',
props: {
rankList: {
type: Array,
required: true,
default: () => []
},
labelField: {
type: String,
required: true,
default: ''
},
countField: {
type: String,
required: true,
default: ''
}
},
data() {
return {
customColor: '#1BBDEC',
completeVal: 0
}
}
}
</script> <style scoped>
/* 进度条的圆角移除 */
/deep/ .el-progress-bar__outer,
/deep/ .el-progress-bar__inner {
border-radius: 0;
}
/* 移除进度条的底色,设置底部百分百线条 */
/deep/ .el-progress-bar__outer {
background-color: unset !important;
border-bottom: 1px #1BBDEC solid;
}
/* 拉开进度条底线和占比的间距 */
/deep/ .el-progress-bar__inner {
top: -2px;
}
/* 进度条上面的排名信息展示 */
.rank-header {
color: #1BBDEC;
margin-bottom: 5px;
font-size: 18px;
}
</style>
组件使用:
<rank-charts :rank-list="carSourceList" count-field="val" label-field="label" style="padding: 10px;" />
接口数据处理:
因为进度条组件的进度是自己计算的,排名按最多的那个为100%来算
设置一个percent属性即可实现
async initializeCarSourceData(regionCode, [startTime, endTime]) {
const { data: carSourceData } = await getStatisticDataAnalysisOfCarSource(regionCode, { startTime, endTime })
this.carSourceList = carSourceData['countList'].map((val, idx, arr) => ({
val,
label: carSourceData['nameList'][idx],
percent: (val / arr[0]).toFixed(2) * 100
}))
},
【Vue】自己编写排名组件的更多相关文章
- VUE创建播发器组件并调用
欢迎来到我的友链小屋 首先用vue-cli创建前端项目 参考:https://www.cnblogs.com/ouyangkai/p/11549290.html 新建play.vue文件 编写pl ...
- Vue.js学习 Item11 – 组件与组件间的通信
什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有 ...
- vue插件编写与实战
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 热爱vue开发的同学肯定知道awesome-vue 这个github地址,里面包含了数以千计的vue ...
- 【Vue】---编写Vue插件流程---【巷子】
一.在Vue中编写插件流程 1.创建组件 components/message.vue <template> <div class="message" v-if= ...
- Vue:实践学习笔记(3)——组件使用
Vue:实践学习笔记(3)——组件使用 全局注册 1.注册组件 Vue.component('my-component',{ //选项 }) 说明:my-component就是注册的组件自定义的标签名 ...
- Vue.js的动态组件模板
组件并不总是具有相同的结构.有时需要管理许多不同的状态.异步执行此操作会很有帮助. 实例: 组件模板某些网页中用于多个位置,例如通知,注释和附件.让我们来一起看一下评论,看一下我表达的意思是什么.评论 ...
- Vue的指令以及组件化开发
一. 自定义指令 如何: 1. 创建指令 Vue.directive("指令名",{ inserted(elem){//指令所在的元素被加载到DOM树上后自动执行指令 //elem ...
- Vue插件编写、用法详解(附demo)
Vue插件编写.用法详解(附demo) 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一 ...
- Vue源码之组件化/生命周期(个人向)
大致流程 具体流程 组件化 (createComponent) 构造⼦类构造函数 const baseCtor = context.$options._base // plain options ob ...
- 基于Vue搭建自己的组件库(1)
本项目演示地址:https://husilang.github.io/zm-ui 项目参考文章:从零开始搭建Vue组件库 VV-UI 项目的初衷是学习怎么封装一个基于Vue的UI组件库,顺便记录每个步 ...
随机推荐
- linux使用过程中遇到的常见问题
1 xxxx is not in the sudoers file. This incident will be reported. 解决方式:https://www.cnblogs.com/xym4 ...
- 看我地win 11截图,啪啪的~
挂载20G内存直接虚拟内存关闭到默认125兆了 这个得设置,不设置会非常卡,字多图多得都要设置
- nginx目录索引、文件下载服务
目录索引.文件下载服务 官网文档 http://nginx.org/en/docs/http/ngx_http_autoindex_module.html 利用nginx实现文件下载服务器 1.参数说 ...
- Promise 期约
Promise 期约之前 回调地狱 设想这样一个经常发生的场景,我们希望处理Ajax请求的结果,所以我们将处理请求结果的方法作为回调传入,需要将请求结果继续处理,这就导致我们陷入了回调地狱 doSom ...
- Java学习笔记 - 单例模式
概述 单例模式是一种创建者模式.当我们需要确保系统中某个类仅能存在一个对象时,比如:全局信息类例如当项目启动时我们将一个配置文件读取为一个Config类的实例从而在业务逻辑中通过操作对象读取配置.无状 ...
- Libgdx游戏开发(3)——通过柏林噪音算法地图随机地形
原文: Libgdx游戏开发(3)--通过柏林噪音算法地图随机地形-Stars-One的杂货小窝 在B站刷到了随机地图生成的视频,随手学习下并做下记录 注: 本篇使用javafx应用作演示,算是了解这 ...
- Do not access Object.prototype method 'hasOwnProperty' from target object
hasOwnProperty 判断对象是否为空 在使用 hasOwnProperty 判断对象是否为空时遇到了一下问题,总结一下 // Do not access Object.prototype m ...
- 字符数组数据映射转换到实体对象model注解方式 demo
1.model对象 public class UserModel { @ColumnAnnotation(index=0) private String username; @ColumnAnnota ...
- redis简单应用demo - 订单号自增长的思路:业务编码+地区+自增数值
redis简单应用demo1.字符串127.0.0.1:6379> set hello toneyOK127.0.0.1:6379> type hellostring127.0.0.1:6 ...
- uniapp 开发微信小程序 使用微信小程序一键登录
研究了一天的uniapp开发微信小程序的第一步,登录! 刚开始使用uni.getUserInfo函数No!不行,无法运行,研究文档发现是这个函数被微信小程序团队给禁用了,OK换! 后来换成了uni.g ...