Echarts中柱状图完成横向布局

效果

代码

javascript 复制代码
import React, { useEffect, useRef } from 'react'
import './index.less'
import * as echarts from 'echarts';
const RightTop = (props: any) => {
    const echarts_ref = useRef<HTMLDivElement | null>(null);
    useEffect(() => {
        if (echarts_ref.current) {
            const myChart = echarts.init(echarts_ref.current);
            let colorList = ['#FF4B01', '#FF7B00', '#FFE823', '#fff', '#fff', '#fff']
            let result = props.teamData
            const option = {
                color: colorList,
                tooltip: {
                    show: false,
                    trigger: 'item',
                    borderColor: 'rgba(3, 11, 44, 0.5)',
                    textStyle: {
                        color: '#9bb2de'
                    }
                },
                legend: {
                    show: false
                },
                grid: {
                    left: '0%', // 向左扩展
                    right: '12%', // 向右扩展
                    top: '5%', // 向上扩展
                    bottom: '5%' // 向下扩展
                },
                xAxis: [
                    {
                        splitLine: {
                            show: false
                        },
                        type: 'value',
                        show: false
                    }
                ],
                yAxis: [
                    {
                        splitLine: {
                            show: false
                        },
                        axisLine: {
                            show: false
                        },
                        type: 'category',
                        axisTick: {
                            show: false
                        },
                    }
                ],
                series: [
                    {
                        name: '',
                        type: 'bar',
                        barWidth: 6, // 柱子宽度
                        MaxSize: 0,
                        showBackground: false,
                        borderRadius: [30, 30, 30, 30],
                        // 名称---
                        label: {
                            show: true,
                            offset: [10, -20], // 将标签上移20个像素
                            color: '#ccc',
                            fontWeight: 400,
                            position: 'left',
                            align: 'left',
                            fontSize: 16,
                            fontFamily: 'YouSheBiaoTiHei',
                            formatter: function (params) {
                                return params.data.name
                            }
                        },
                        data: result.map((item, index) => {
                            return {
                                name: item.name,
                                value: item.value,
                                itemStyle: {
                                    borderRadius: [30, 30, 30, 30],
                                    color: {
                                        type: 'linear',
                                        x: 0,
                                        y: 0,
                                        x2: 1,
                                        y2: 1,
                                        colorStops: [
                                            {
                                                offset: 0,
                                                color: '#0F1F45'
                                            },
                                            {
                                                offset: 1,
                                                color: colorList[index]
                                            }
                                        ]
                                    }
                                }
                            }
                        })
                    },
                    {
                        name: '',
                        type: 'bar',
                        barGap: '-100%',
                        barWidth: 4,
                        showBackground: false,
                        borderRadius: [30, 30, 30, 30],
                        label: {
                            position: 'right',
                            distance: 4,
                            show: true,
                            offset: [0, 0],
                            formatter: function (params) {
                                return '{a|' + params.data.value + '}'
                            },
                            rich: {
                                align: 'left',
                                a: {
                                    color: '#00D1FF',
                                    fontSize: 20,
                                    fontFamily: 'UnidreamLED',
                                    fontWeight: 500
                                },
                            }
                        },
                        data: result.map((item, index) => {
                            return {
                                name: item.name,
                                value: item.value,
                                itemStyle: {
                                    borderRadius: [30, 30, 30, 30],
                                    color: {
                                        type: 'linear',
                                        x: 0,
                                        y: 0,
                                        x2: 1,
                                        y2: 1,
                                        colorStops: [
                                            {
                                                offset: 0,
                                                color: '#0F1F45'
                                            },
                                            {
                                                offset: 1,
                                                color: colorList[index]
                                            }
                                        ]
                                    }
                                }
                            }
                        })
                    }
                ]
            }
            myChart.setOption(option);
        }
    }, [props])


    return (
        <div className='right-top'>
            <div className='right-top-big'>
                <div className='right-top-team'>团队</div>
            </div>
            {
                props.teamData.length > 0 && props.teamData ?
                    <div className='right-top-chart' ref={echarts_ref}></div>
                    :
                    <div style={{ height: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', fontSize: 18 }}>暂无数据</div>
            }
        </div>
    )
}

export default RightTop

less

css 复制代码
.right-top {
  width: 500px;
  height: 290px;
  margin-bottom: 5px;
  .right-top-big {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 500px;
    .right-top-team {
      width: 320px;
      height: 24px;
      margin-top: 14px;
      color: #ffffff;
      font-weight: 400;
      font-size: 22px;
      font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
      font-style: normal;
      line-height: 20px;
      letter-spacing: 1px;
      text-align: center;
      background: linear-gradient(
        90deg,
        rgba(3, 157, 229, 0) 0%,
        rgba(57, 222, 255, 0.26) 50%,
        rgba(3, 157, 229, 0) 100%
      );
      border-radius: 0px 0px 0px 0px;
    }
  }
  .right-top-chart{
    width: 500px;
    height: 270px;
  }
}

技术栈

React + TypeScript + Less + Echarts

相关推荐
摘星编程11 分钟前
用React Native开发OpenHarmony应用:StickyHeader粘性标题
javascript·react native·react.js
A_nanda15 分钟前
c# 用VUE+elmentPlus生成简单管理系统
javascript·vue.js·c#
天天进步201532 分钟前
Motia事件驱动的内核:深入适配器(Adapter)层看消息队列的流转
javascript
北极糊的狐36 分钟前
若依项目vue前端启动键入npm run dev 报错:不是内部或外部命令,也不是可运行的程序或批处理文件。
前端·javascript·vue.js
XRJ040618xrj38 分钟前
Nginx下构建PC站点
服务器·前端·nginx
We་ct1 小时前
LeetCode 289. 生命游戏:题解+优化,从基础到原地最优
前端·算法·leetcode·矩阵·typescript
有诺千金1 小时前
VUE3入门很简单(4)---组件通信(props)
前端·javascript·vue.js
2501_944711431 小时前
Vue-路由懒加载与组件懒加载
前端·javascript·vue.js
雨季6662 小时前
Flutter 三端应用实战:OpenHarmony “心流之泉”——在碎片洪流中,为你筑一眼专注的清泉
开发语言·前端·flutter·交互
换日线°2 小时前
前端3D炫酷展开效果
前端·3d