当前位置: 首页 > news >正文

ECharts 3D柱状图组件开发实战:Bar3D.vue 完整解析

本文将详细解析一个基于 Vue 3 和 ECharts 的 3D 柱状图组件开发过程,展示如何创建美观、可复用的数据可视化组件。

组件概述

Bar3D.vue 是一个专业的 3D 柱状图 Vue 组件,具有以下特点:

  • 3D立体效果:通过多层图形叠加实现立体视觉

  • 丰富的交互:支持悬停提示、动态效果

  • 高度可定制:颜色、尺寸、数据均可配置

  • 响应式设计:自动适应容器大小

核心代码解析

1. 组件参数定义

const props = defineProps({data: {type: Array,default: () => [{name: '项目一',value: 175.17,},// ... 更多数据]},backgroundColor: {type: String,default: 'transparent'},unit: {type: String,default: ''},barWidth: {type: Number,default: 12}
})

2. 颜色配置系统

组件内置了精心设计的颜色配置,确保视觉效果协调统一:

const colorConfig = {ciolColor1: ['rgba(64, 158, 255, 1)','rgba(19, 194, 194, 1)','rgba(247, 186, 41, 1)',// ... 更多颜色],// ... 其他颜色组
}

3. 数据处理逻辑

const processData = (data) => {const xAxisData = []const seriesData = []let sum = 0data.forEach((item) => {xAxisData.push(item.name)seriesData.push(item.value)sum += item.value})// 计算底部和顶部数据const bottomData = data.map(item => ({ name: '', value: sum - item.value }))const topData = data.map(() => ({ name: '', value: sum }))return {xAxisData,seriesData,bottomData,topData,sum}
}

4. 3D效果实现原理

组件通过多个系列叠加实现3D效果:

  1. 底部圆片:使用 effectScatter 创建底座发光效果

  2. 主体柱状图:渐变色彩的柱体,带有圆角设计

  3. 顶部装饰:使用 pictorialBar 创建立体顶部

  4. 背景底色:半透明背景增强层次感

// 动态计算尺寸,确保比例协调
const barWidth = props.barWidth
const symbolHeight = Math.max(2, barWidth * 0.15)
const symbolOffset = Math.max(1, barWidth * 0.08)

5. 自定义提示框

formatter: function (params) {const index = params[0].dataIndexconst color = colorConfig.ciolColor1[index % colorConfig.ciolColor1.length]const name = processedData.xAxisData[index]const value = processedData.seriesData[index]return `<div style="font-size: 14px; padding: 8px;"><div style="display: flex; align-items: center; margin-bottom: 4px;"><span style="display: inline-block; width: 8px; height: 8px; background: ${color}; border-radius: 50%; margin-right: 8px;"></span><span style="font-weight: 600;">${name}</span></div><div style="color: rgba(255, 255, 255, 0.8);">数值: ${value}${props.unit}</div></div>`
}

使用示例

基础使用

<template><div class="chart-container"><Bar3D :data="chartData" unit="万元" /></div>
</template><script setup>
import Bar3D from '@/components/Bar3D.vue'const chartData = [{ name: '产品A', value: 245.67 },{ name: '产品B', value: 189.32 },{ name: '产品C', value: 156.89 },{ name: '产品D', value: 203.45 }
]
</script>

自定义配

http://www.dtcms.com/a/541450.html

相关文章:

  • 手机App上的轮播图是如何实现的—探究安卓轮播图
  • Day71 MQTT数据上传与ARM端交叉编译部署全链路实践
  • 2024年 5月 每日分享
  • 漯河英文网站建设创建私人网站
  • 网站开发学哪一个好电子商务网站建设模板
  • 5.4 大数据方法论与实践指南-存储-安全合规
  • 凡科建设网站图片怎么删除专门做自由行的网站
  • 车辆智能检索与缉查布控
  • Cesium中如何修改geojson数据的颜色
  • 51c大模型~合集42
  • C++语法—类的声明和定义
  • 企业网站建设方案资讯查询公司的网站
  • 高端企业网站建设公司免费网站代理访问
  • JavaEE初阶——多线程(4)线程安全
  • 杭州网站推广营销服务深圳做美颜相机的公司
  • 什么样 个人网站 备案适合做网站的软件有哪些
  • 做设计在哪个网站上找高清图青岛做物流网站
  • 数据源切换的陷阱:Spring Boot中@Transactional与@DS注解的冲突博弈与破局之道
  • Kubernetes节点资源优化:自托管代理配置实践
  • 1688网站怎样做推广东莞市路桥收费所
  • 做网站需要用到哪些开发软件潜江资讯网信息发布
  • Day2实战-元组的基本操作
  • 01 数学建模中M的取值影响及分析
  • 深入 Actix-web 源码:解密 Rust Web 框架的高性能内核
  • Linux远程控制Windows桌面的cpolar实战指南
  • 焦作网站建设哪家好自己怎么用h5做网站
  • 论坛程序做导航网站photoshop安卓版
  • FP16 vs INT8:Llama-2-7b 昇腾 NPU 精度性能基准报告
  • Steering Llama 2 via Contrastive Activation Addition
  • 座舱出行Agent实战(三):专能化架构如何实现效率与稳定性的双重飞跃