首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

表格中添加渐变色带,表格中添加多色色带,el-table中添加渐变色带,elementUI表格添加色带

  • 25-02-22 02:41
  • 3347
  • 8633
blog.csdn.net

目录

​一、先看效果

1.1、表格中使用渐变色带的效果​编辑

1.2、表格中使用多色色带的效果(基于不同的维度)

①多色色带

②多色色带的筛选

二、如何在表格中添加渐变色带

三、如何在表格中添加多色色带

四、总结


​一、先看效果

1.1、表格中使用渐变色带的效果​编辑

  performance为渐变色带,能大幅提升可视化效果,优雅美观,同时也可以自定义程度,比如60以下就需要警告或者表示危险,就可以用红色渐变绿色,将渐变点设置在60%的位置,这样渐变色带在美观的同时本身也能带有更多的信息。

1.2、表格中使用多色色带的效果(基于不同的维度)

①多色色带

  这里performance为多色色带,只要选好配色,就能明亮简洁,信息全面,同时也能做维度筛选。直观来看是综合的色带,但是每个具体的维度都能展示,并且可以隐藏部分维度重新排序(也就能实现单维度展示和排序)

②多色色带的筛选

二、如何在表格中添加渐变色带

  这里的核心思想是通过background,相当于将色带当做背景图片添加到表格中,所以色带中也可以添加合适的文字说明,比如具体的数值或者简洁描述等。

  先上html代码:

  1. <el-table :data="rankingDataFormatted" stripe>
  2. <el-table-column prop="ranking" label="Rank" width="100">el-table-column>
  3. <el-table-column prop="cityName" label="Country" width="200">el-table-column>
  4. <el-table-column prop="score" label="Score" width="200">el-table-column>
  5. <el-table-column label="Performance">
  6. <template v-slot="scope">
  7. <div :style="{background: getBackgroundColor(scope.row.score), height: '20px'}">div>
  8. template>
  9. el-table-column>
  10. el-table>

        就是一个elementui-plus的table,用了一个插槽用来放置色带背景。

        再上js代码:

  1. const getBackgroundColor = (score) =>{
  2. const percentage = score / 100;
  3. const filledPercentage = Math.min(percentage, 1);
  4. const filledColorHead = '#95CCDE';
  5. const filledColorFoot = '#A9B2D4';
  6. const emptyColor = '#EEEEEE';
  7. return `linear-gradient(to right, ${filledColorFoot}, ${filledColorHead} ${filledPercentage * 100}%, ${emptyColor} ${filledPercentage * 100}%)`;
  8. }

        这里要注意的是:

  • 返回的是一个模版字符串。空白区域的颜色emptyColor是浅灰色。
  • 如上图浅灰色比白色要美观非常多,而且白色没有辨识度只能判断谁多谁少,不能基于某一行判断距离最佳情况差距有多大。

三、如何在表格中添加多色色带

        大致思路跟渐变色带一样,都是用动态样式,但是这里细节多一些,我尽可能放整段代码便于理解和阅读。

  1. <el-select
  2. v-model="selectedDimension"
  3. multiple
  4. placeholder="Select"
  5. style="width: 190px"
  6. >
  7. <el-option
  8. v-for="item in dimensionColors"
  9. :key="item.value"
  10. :label="item.label"
  11. :value="item.value"
  12. >
  13. <div class="flex items-center">
  14. <el-tag :color="item.value" style="margin-right: 8px" size="small" />
  15. <span :style="{ color: item.value }">{{ item.label }}span>
  16. div>
  17. el-option>
  18. <template #tag>
  19. <el-tag
  20. v-for="color in selectedDimension"
  21. :key="color.value"
  22. :color="color"
  23. />
  24. template>
  25. el-select>
  26. <el-card class="container">
  27. <el-table :data="rankingDetailData" stripe>
  28. <el-table-column type="index" label="Rank" width="100">el-table-column>
  29. <el-table-column
  30. prop="cityName"
  31. label="Country"
  32. width="200"
  33. >el-table-column>
  34. <el-table-column label="Score" width="200" sortable="custom">
  35. <template v-slot="scope">
  36. {{ formatScore(scope.row) }}
  37. template>
  38. el-table-column>
  39. <el-table-column label="Performance">
  40. <template v-slot="scope">
  41. <div
  42. :style="{
  43. background: getBackgroundColor(scope.row),
  44. height: '20px',
  45. }"
  46. >div>
  47. template>
  48. el-table-column>
  49. el-table>
  50. el-card>

        其中:

  • el-select对应就是维度的选择器,通过选择的维度来渲染色带的维度数量和颜色
  • 这里Score列基于实际需求,做了可变数据的动态排序,el-table实现可变数据的动态排序没有直接的API,这里需要打开一点思路,我会再写一篇博客来介绍基于el-table实现可变数据的动态排序,博客链接会放在评论区。

        再上js代码:

  1. // 各维度颜色
  2. const dimensionColors = ref([
  3. {
  4. value: "#FF6600",
  5. label: "创新发展",
  6. },
  7. {
  8. value: "#FFDE0A",
  9. label: "协调发展",
  10. },
  11. {
  12. value: "#1EC79D",
  13. label: "绿色发展",
  14. },
  15. {
  16. value: "#14CCCC",
  17. label: "开放发展",
  18. },
  19. {
  20. value: "#4167F0",
  21. label: "共享发展",
  22. },
  23. ]);
  24. // 选中的维度
  25. const selectedDimension = ref([]);
  26. // 将所有维度颜色添加到初始框中
  27. dimensionColors.value.forEach((color) => {
  28. selectedDimension.value.push(color.value);
  29. });
  30. // 搞定多维度的色带
  31. const getBackgroundColor = (row) => {
  32. // 先定下来颜色
  33. const innovationColor = "#FF6600";
  34. const operateColor = "#FFDE0A";
  35. const greenColor = "#1EC79D";
  36. const openColor = "#14CCCC";
  37. const sharingColor = "#4167F0";
  38. const emptyColor = "#EEEEEE";
  39. var arr = [];
  40. // 将选中的颜色放到arr中,arr用来确定选择框里面放什么颜色
  41. selectedDimension.value.forEach((element) => {
  42. dimensionColors.value.forEach((item) => {
  43. if (item.value == element) {
  44. var data = {};
  45. data.dimension = item.label;
  46. data.score = Number(row[item.label]);
  47. arr.push(data);
  48. return;
  49. }
  50. });
  51. });
  52. // 产出色带,百分号里面的数据可以减去0.3,能添加柔和效果
  53. return `linear-gradient(to right,
  54. ${innovationColor} 0%, ${innovationColor} ${arraySum(arr, 1)}%,
  55. ${operateColor} ${arraySum(arr, 1)}%, ${operateColor} ${arraySum(arr, 2)}%,
  56. ${greenColor} ${arraySum(arr, 2)}%, ${greenColor} ${arraySum(arr, 3)}%,
  57. ${openColor} ${arraySum(arr, 3)}%, ${openColor} ${arraySum(arr, 4)}%,
  58. ${sharingColor} ${arraySum(arr, 4)}%, ${sharingColor} ${arraySum(arr, 5)}%,
  59. ${emptyColor} ${arraySum(arr, 5)}%, ${emptyColor} 100%)`;
  60. };
  61. // 数组求和方法,适用于getBackgroundColor方法
  62. const arraySum = (arr, n) => {
  63. let sum = 0;
  64. var dimensionOrder = [
  65. "创新发展",
  66. "协调发展",
  67. "绿色发展",
  68. "开放发展",
  69. "共享发展",
  70. ];
  71. for (let i = 0; i < n; i++) {
  72. arr.forEach((item) => {
  73. if (item.dimension == dimensionOrder[i]) {
  74. sum += item.score;
  75. }
  76. });
  77. }
  78. return sum;
  79. };

        最巧妙的地方在于,select选择框里面的颜色是无序的,经过反复的去掉选择和重复选择,颜色的排列是杂乱的,但是色带的颜色始终是有序的。这样的好处在于,规定的色带只会出现在特定的位置,如果某个色带被取消勾选,那么它所代表的色带的长度就是零。其后面的色带会依次前移,重新勾选之后这个色带也会出现在原先的位置,而不是出现在色带最后,这样可以实现“颜色-->维度”和“位置-->维度”两方面的一一对应,大大提升了可视化体验,阻止了重复操作中信息的熵增。

四、总结

        写代码不能局限于使用他人或机构、组织封装的代码,而需要更多的去了解人家的底层设计,多尝试二次开发,比如这里的后端排序接口,只需要一点点思路上的变动就能变成前端的动态排序接口,这就是思路带来的改变,如果只会用官方文档提供的API,是做不来一个优质的程序员的。

        更多丰富的前端内容请看:各种前端问题的技巧和解决方案

        更多elementui小技巧:vue2/3+elementui,满足实际开发需求的各种“骚操作”

        博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

文章知识点与官方知识档案匹配,可进一步学习相关知识
Vue入门技能树首页概览43124 人正在系统学习中
注:本文转载自blog.csdn.net的Watermelo617的文章"https://blog.csdn.net/RenGJ010617/article/details/137212155"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top