echarts实践总结(常用一):柱状图(特点:渐变色、点击缩放、左右滑动、悬浮展示样式)

时间:2024-03-18 19:14:15

目录

第一章 echarts基本使用

第二章 echarts实践——柱状图


  • 效果展示

第一章 echarts基本使用

Echarts常用配置项(详细入门)_echarts配置项手册-CSDN博客

第二章 echarts实践——柱状图

最近接到这么一个需求,需要画页面,然后有这么几个echarts的图需要画,平常我们通过教程都是绘画一些简单的柱状图,导致我们对ecahrts的一些api不适特别深入,小编也是,这里就给出一个小编实战中的例子,涵盖面相对广一点,实现的效果有:鼠标悬浮有另一个柱状图覆盖、可以缩放从而添加可视区域柱子的条数、左右滑动展示柱状图、渐变颜色以及一些基本的柱状图配置。

  • html部分
<div class="bar" style="width: 1000px;height: 500px;">
    <!-- 柱状图 -->
    <div id="handlerView" style="width: 100%;height: 100%;"></div>
</div>
  • js部分——详细说明在代码中
<script src="./base_js/echarts.min.js"></script>
<script>
    const handlerViewDom = document.getElementById('handlerView')
    let handlerChart = echarts.init(handlerViewDom)
    // x轴数据
    let xData = ['苏州', '无锡', '南通', '常州', '徐州', '扬州', '南京', '宿迁', '连云港', '盐城', '淮安', '镇江', '泰州']
    // y轴数据
    let yData = [28, 32, 12, 36, 35, 37, 29, 33, 21, 23, 34, 20, 27]
    // 最大值,用于设置背景柱体高度
    let maxData = []
    let temp = yData.sort((a, b) => {
        return a - b
    })
    yData.forEach(item => {
        maxData.push(temp[temp.length - 1])
    })
    let handlerOption = {
        xAxis: {
            type: 'category', // 类型
            data: xData, // x轴数据
            axisLine: { // x坐标轴轴样式展示
                show: true, // 是否显示坐标轴x轴线。
                onZero: true, // X 轴或者 Y 轴的轴线是否在另一个轴的 0 刻度上
                symbol: 'none', // 轴线两边的箭头。可以是字符串,表示两端使用同样的箭头;或者长度为 2 的字符串数组,分别表示两端的箭头。默认不显示箭头,即 'none'。两端都显示箭头可以设置为 'arrow',只在末端显示箭头可以设置为 ['none', 'arrow']
                lineStyle: { // x轴的样式,一个对象,属性有:{ color , width , type , dashOffset , cap , join , miterLimit , shadowBlur , shadowColor , shadowOffsetX , shadowOffsetY , opacity }
                    color: '#B6BABD'
                }
            },
            axisTick: { // 是否显示坐标轴刻度
                show: false
            }
        },
        yAxis: {
            name: '单位(时)', // 坐标轴名称
            axisLabel: { // 坐标轴刻度标签的相关设置
                color: '#999999', // 颜色
                fontSize: 14, // 字体
            },
            splitLine: { // 坐标轴在 grid 区域中的分隔线
                show: true, // 是否显示分隔线。
                lineStyle: { // 分隔线的样式——属性有:{ color , width , type , dashOffset , cap , join , miterLimit , shadowBlur , shadowColor , shadowOffsetX , shadowOffsetY , opacity }
                    color: '#D9DFE2', // 颜色
                    type: 'dashed', // 类别 'solid' 、 'dashed' 、 'dotted'
                },
            },
        },
        //图表与容器的位置关系
        grid: {
            left: '5%',   // 与容器左侧的距离
            right: '3%', // 与容器右侧的距离
            top: '19%',   // 与容器顶部的距离
            bottom: '15%', // 与容器底部的距离
        },
        tooltip: { // 提示框组件
            /*
                item: 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
                axis: 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
                none: 什么都不触发
            */
            trigger: 'axis', // 触发类型
            showDelay: 0, // 延时展示时间
            axisPointer: { // 坐标轴指示器配置项 —— 具体可以自行尝试
                /*
                    line:直线指示器
                    shadow:阴影指示器
                    none:无指示器
                    cross:十字准星指示器
                */
                type: 'line', // 指示器类型
                lineStyle: { // 设置指示器样式
                    color: { // 设置渐变色
                        type: 'line',
                        x: 0,
                        y: 0,
                        x2: 1,
                        y2: 1,
                        colorStops: [{ // 0-1的渐变,可以自行尝试
                            offset: 0, color: 'rgba(82, 141, 251, 0.2)'
                        }, {
                            offset: 1, color: 'rgba(82, 141, 251, 0)'
                        }],
                    },
                    type: 'solid', // 设置实现
                    width: 40 // 线的宽度
                },
            }
        },
        dataZoom: [{  // 缩放
            show: false, // 是否展示
            type: 'slider', // 滑动条型数据区域缩放组件提供了数据缩略图显示
            startValue: 0, // 开始索引
            endValue: 6 // 结束索引
        }, {
            /*
                平移:在坐标系中滑动拖拽进行数据区域平移。
                缩放:
                    PC端:鼠标在坐标系范围内滚轮滚动(MAC触控板类同)
                    移动端:在移动端触屏上,支持两指滑动缩放。
            */
            type: 'inside'
        }],
        series: [
            {
                name: '平均统计时间', // 系列名称
                type: 'bar', // 类别
                barWidth: 16, // 柱条的宽度,不设时自适应
                label: {  // 图形上的文本标签,可用于说明图形的一些数据信息
                    show: true, // 是否显示标签。
                    position: 'top', // 显示位置
                    color: '#666666', // 颜色
                    zlevel: 4 // 用于分层使用
                },
                itemStyle: { // 图形样式
                    normal: { // 自定义渐变颜色
                        color: (params) => ({
                            type: 'linear',
                            x: 0,
                            y: 1,
                            x2: 0,
                            y2: 0,
                            colorStops: [
                                {
                                    offset: 0,
                                    color: '#5A93FC',
                                },
                                {
                                    offset: 1,
                                    color: '#97C5FF',
                                },
                            ]
                        })
                    }
                },
                data: yData, // data数据
            }
        ]
    };
    // 该函数为绑定了个点击事件
    const zoomSize = 7;
    handlerChart.on('click', function (params) {
        // 通过计算获取周围的值
        handlerChart.dispatchAction({
            type: 'dataZoom',
            startValue: xData[Math.max(params.dataIndex - zoomSize / 2, 0)],
            endValue:
                xData[Math.min(params.dataIndex + zoomSize / 2, yData.length - 1)]
        });
    });
    // 渲染echarts图标
    handlerOption && handlerChart.setOption(handlerOption)
    // 监听窗口发生变化,重新渲染页面
    handlerChart.resize()
    window.addEventListener('resize', () => {
        handlerChart.resize()
    })
</script>