【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组件库,顺便记录每个步 ...
随机推荐
- 解决 Https 站点请求 Http 接口服务后报 the content must be served over HTTPS 错误的问题
问题分析 之前将自己所有的 Http 站点全部更新为 Https 站点,但是在请求后台接口服务的时候还是 Http 请求,导致部署之后,直接在控制台报 This request has been bl ...
- 基于Vue的二进制时钟组件 -- fx67llBinaryClock
fx67llClock Easy & Good Clock ! npm 组件说明 一个基于Vue的二进制时钟组件,没什么卵用,做着好玩,可以方便您装饰个人主页 使用步骤 npm install ...
- CF98C Help Greg the Dwarf 题解
CF98C Help Greg the Dwarf 题解 为什么不三分? 首先我们考虑如何求出答案. 如图,考虑设夹角为 \(\theta\),那么可以得到表达式: \[[\cfrac a {\tan ...
- k8s 安装ingress nginx controller 并部署.net core ingress服务
k8s 安装ingress nginx controller 并部署.net core ingress服务 本地k8s集群概览 192.168.28.132 k8smaster 192.168.28. ...
- 使用vscode写Markdown并且导出为pdf(干货)
目录 序言 下载vscode 安装插件 markdown语法 导出为pdf 序言 大家在学习过程中都会有记笔记的好习惯(美观的笔记当然是上上选),于是,Markdown就是一个不错的选择,待会也会附上 ...
- Jx9 虚拟机
一.Jx9 虚拟机的生命周期 加载 Jx9 脚本 jx9_compile() 或 jx9_compile_file(),加载编译成功后,Jx9 引擎将自动创建一个实例 (jx9_vm) 并且返回指向此 ...
- 【题解】CatOJ C0458C 滑动窗口定期重构
标题 trick 的名字我也不知道是什么,就这样吧. 首先有显然的 dp 式子:\(f(i)=\min \{f(j) \times \max\{a_{j+1},\dots,a_i\}\}\).考虑怎么 ...
- Debezium-Flink-Hudi:实时流式CDC
1. 什么是Debezium Debezium是一个开源的分布式平台,用于捕捉变化数据(change data capture)的场景.它可以捕捉数据库中的事件变化(例如表的增.删.改等),并将其转为 ...
- 什么是Selenium Grid?如何搭建Selenium Grid?
标签(空格分隔): 测试架构 什么是测试基础架构? 测试基础架构指的是,执行测试的过程中用到的所有基础硬件设施以及相关的软件设施.因此,我们也把测试基础架构称之为广义的测试执行环境.通常来讲,测试基础 ...
- P8451 题解
显然,题面明摆着让你写一个可持久化 AC 自动机. 但是从空间来说这是不可能的. 想起做 不强制在线 的可持久化数据结构的一种方法,建立"时光树",具体来说,假若版本 \(x\) ...