我们通常的做法就是用echarts来实现
比如
接着我们实现进阶版,增加渐变效果
接着是又在渐变的基础上,增加了背景色块的填充
其实思路是一致的,就是效果层的叠加
以上,就是在项目中实际会用到的效果
如果你只是想做一个静态demo,不需要数据,不需要后台,这里教你一个简单快捷的方法,用css实现!
实现效果如下↓
相关代码:
- <template>
- <!--css实现电量效果-->
- <div class="panel">
- <div class="content">
- <div class="legend">
- <div class="legend-item">
- <span class="legend-icon" style="background:linear-gradient(0deg,rgba(247,240,42,1),rgba(255,84,84,1));"></span>
- <span class="legend-label">报修</span>
- </div>
- <div class="legend-item">
- <span class="legend-icon" style="background:linear-gradient(0deg,rgba(22,233,16,1),rgba(22,230,247,1));"></span>
- <span class="legend-label">维护</span>
- </div>
- </div>
- <div class="chart">
- <div class="chart-item" v-for="(item,index) in datas">
- <div class="chart-bg">
- <span class="char-bg-item" v-for="n in 12" v-bind:style="char_bg_item_style1(item,n)"></span>
- </div>
- <div class="chart-bg">
- <span class="char-bg-item" v-for="n in 12" v-bind:style="char_bg_item_style2(item,n)"></span>
- </div>
- <div class="chart-label">{{item.label}}</div>
- </div>
- </div>
- </div>
- </div>
- </template>
- <script>
- import gradient from "@/lib/GradientColor.js";
-
- export default {
- name: "BatteryCss",
- data() {
- return {
- maxValue: 30,
- datas: [
- { label: "2023/01", fix: 10, mainten: 12 },
- { label: "2023/02", fix: 8, mainten: 6 },
- { label: "2023/03", fix: 4, mainten: 8 },
- { label: "2023/04", fix: 7, mainten: 5 },
- { label: "2023/05", fix: 4, mainten: 6 },
- { label: "2023/06", fix: 2, mainten: 3 },
- ],
- };
- },
- methods: {
- char_bg_item_style1(item, n) {
- if (n <= 12 - item.fix) {
- return {
- backgroundColor: "#D9D9D9",
- };
- } else {
- return {
- //渐变色
- backgroundColor: gradient("#F0E82C", "#EF7E5D", 12, n),
- };
- }
- },
- char_bg_item_style2(item, n) {
- if (n <= 12 - item.mainten) {
- return {
- backgroundColor: "#D9D9D9",
- };
- } else {
- return {
- //渐变色
- backgroundColor: gradient("#25E2F2", "#19E419", 12, n),
- };
- }
- },
- },
- };
- </script>
- <style scoped>
- .panel {
- width: 500px;
- background: #1c242b;
- }
- .legend {
- height: 32px;
- width: 100%;
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- line-height: 32px;
- }
-
- .legend-item {
- width: 80px;
- }
-
- .legend-icon {
- width: 18px;
- height: 12px;
- border-radius: 2px;
- display: inline-block;
- }
-
- .legend-label {
- font-size: 12px;
- color: #aaa;
- margin-left: 10px;
- }
-
- .chart {
- width: 100%;
- height: calc(100% - 32px);
- display: flex;
- flex-direction: row;
- justify-content: space-around;
- align-items: center;
- }
-
- .chart-item {
- width: 72px;
- height: 124px;
- }
-
- .chart-bg {
- position: relative;
- top: 14px;
- left: 14px;
- width: 18px;
- height: 81px;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- float: left;
- margin-left: 2px;
- }
-
- .char-bg-item {
- height: 4px;
- width: 18px;
- display: inline-block;
- background: #d9d9d9;
- }
-
- .chart-label {
- height: calc(124px - 81px);
- font-size: 14px;
- color: #a5a6a6;
- position: relative;
- top: 20px;
- text-align: center;
- }
- </style>
版本信息↓
思路很简单,就是循环画一个一个小块块