【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组件库,顺便记录每个步 ...
随机推荐
- vue 的时间格式化
大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...
- http1.1 的默认长连接 Connection: keep-alive 与 TCP KeepAlive 之间区别
HTTP 长连接,也称为 HTTP 持久连接(HTTP Persistent Connection)或 HTTP 连接重用,是一种在 HTTP 协议中实现的机制. 在传统的 HTTP 通信中,每个 H ...
- item2 报错 a session ended very soon after starting. check that the command in profile default
周末修改了阿里云 ecs 实例密码,再次用item2 远程连接服务器时,报一下的错误: 原因 每次使用ssh 远程新的连接,都会在 ~/.ssh/known_hosts 文件上生成 ssh 秘钥对,更 ...
- 阿里bxet逆向
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 x82y 分析过 ...
- java springboot 指定运行端口
java springboot 指定运行端口 方法1: 修改源代码里的"\src\main\resources\application.properties" 文件,增加或修改 s ...
- k8s 安装ingress nginx controller 并部署.net core ingress服务
k8s 安装ingress nginx controller 并部署.net core ingress服务 本地k8s集群概览 192.168.28.132 k8smaster 192.168.28. ...
- 通过JS来触发<a>链接来实现图片下载
function downloadImg(){ var url = '实际情况的图片URL'; // 获取图片地址 var a = document.createElement('a'); // 创建 ...
- 微软新Edge浏览器 WIN7 无法登录
由于设备上的系统组件过期,不支持登录.请确保 Windows 为最新版本,然后重新尝试登录.访问 https://go.microsoft.com/fwlink/?linkid=2107246 了解详 ...
- web框架及Django简介
WEB框架 Web框架是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法. web框架已经实现了很多功能 ...
- AGE SORT
AGE SORT 你有所有城市的人的年齡資料,而且這城市的人們都大於1歲,且都不會活超過100歲.現在你有個簡單的任務以升冪去排序所有的年齡 Input 接下來會有很多筆的資料,每筆資料從輸入n 開始 ...