echats 柱状图的点击事件及高亮

点击柱状图触发事件及双击柱状图高亮

在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js -->
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.0.1/echarts.min.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="text"></div>
    <div id="main" style="width: 1000px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        var checkName = ''
        var obj = {
            "xAxis":["潍坊","临沂","泰安","运河","青岛","东营","未管所","济宁","德州","潍北","鲁北","济南","北墅","滕州","鲁西","鲁南","湖西","微湖","淄博","鲁中","渝北区戒毒所","齐州","专属","威海","第二女子","聊城","济南第二","菏泽","省","鲁宁","烟台","新康","历山","枣庄","任城"],
            "datas":[86,50,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
        }
        // 指定图表的配置项和数据
        var option = {
                grid: {
                        x: 40,
                        y: 20,
                        x2: 30,
                        y2: 20,
                        borderWidth: 0,
                        bottom: "25%"
                },
                xAxis: {
                        type: "category",
                        data: obj.xAxis,
                        axisLabel: {
                            textStyle: {
                                color: "#515A6E"
                            },
                            margin: 21,
                            interval: 0,
                            fontSize: 12,
                            rotate: 0,
                            formatter: function (params) {
                                var newParamsName = "";
                                var paramsNameNumber = params.length;
                                var provideNumber = 6;
                                var rowNumber = Math.ceil(paramsNameNumber / provideNumber);
                                if (paramsNameNumber > provideNumber) {
                                    for (var p = 0; p < rowNumber; p++) {
                                    var tempStr = "";
                                    var start = p * provideNumber;
                                    var end = start + provideNumber;
                                    if (p == rowNumber - 1) {
                                        tempStr = params.substring(start, paramsNameNumber);
                                    } else {
                                        tempStr = params.substring(start, end) + "\n";
                                    }
                                    newParamsName += tempStr;
                                    }
                                } else {
                                    newParamsName = params;
                                }
                                return newParamsName;
                            },
                        },
                        axisLine: {
                            show: true,
                            lineStyle: {
                            color: "#E0E7EF",
                            width: 0,
                            type: "solid",
                            },
                        },
                        axisTick: {
                            show: false,
                        },
                },
                yAxis: {
                        type: "value",
                        scale: true,
                        max: 100,
                        min: 0,
                        splitNumber:5,
                        boundaryGap: [0.2, 0.2],
                        axisLabel: {
                            textStyle: {
                                color: "#999",
                            },
                             show: true,  
                            interval: 'auto',  
                            formatter: "{value}%",
                        },
                        axisLine: {
                            show: false,
                        },
                        axisTick: {
                            show: false,
                        },
                        splitLine: {
                            show: true,
                            lineStyle: {
                                color: 'rgb(240, 240, 240)',
                                width: 1,
                                type: 'solid'
                            }
                        }
                },
                dataZoom: [
                    // {
                    // type: 'slider',
                    // show: true, //flase直接隐藏图形
                    // xAxisIndex: [0],
                    // left: '0%', //滚动条靠左侧的百分比
                    // bottom: -5,
                    // height: 15,
                    // start: 0,//滚动条的起始位置
                    // end: 40, //滚动条的截止位置(按比例分割你的柱状图x轴长度)
                    // backgroundColor:"rgba(255,255,255,0)",
                    // // fillerColor:"rgba(255,255,255,0.4)",
                    // textStyle:false
                    // }
                    {
                        type:'inside',
                        filterMode: 'empty',
                        maxValueSpan: 13,
                        minValueSpan:10,
                        start:0,
                        end:40
                    }
            ],
                series: [
                        {
                            type: "bar",
                            // barCategoryGap:'40%',
                            barWidth: 18,
                            itemStyle: {
                                normal: {
                                    // color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                                    //     { offset: 0, color: "#EAB2F6" },
                                    //     { offset: 0.5, color: "#8D8BFF" },
                                    // ]),
                                    color: function(params) {
                                        let color1 = new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                                            { offset: 0, color: "#EAB2F6" },
                                            { offset: 0.5, color: "#8D8BFF" },
                                        ])
                                        let color2 = '#000'
                                        if (params.name === checkName) {
                                            return color1
                                        } else {
                                            return color2
                                        }
                                    },
                                    barBorderRadius: [30, 30, 0, 0],
                                    label:{
                                    show:true,
                                    position:'top',
                                    textStyle:{
                                        color:'#999',
                                        fontSize:10
                                    }
                                    }
                                },
                            },
                            label:{normal:{
                                formatter:"{c}%"
                            }},
                            data: obj.datas,
                            showBackground: true,
                            backgroundStyle: {
                                color: "#f9fafc",
                                barBorderRadius: [30, 30, 0, 0],
                            },
                        },
                ]
            }

        /*
            主要用在有高亮的数据部分可以点击  其他数据为0的点击不了
        */ 
        var drawChatOne = function() {
            myChart.clear()
            myChart.setOption(option);
            // 防止点击时触发多次事件
            myChart.off('click')
            // 添加柱状图点击事件
            myChart.on('click',function(params){
                console.log(params)
               //点击的柱子的名称
               checkName = params.name;
               //柱形图重构
               myChart.setOption(option);
               document.getElementById('text').innerHTML = checkName
            })
        }
        drawChatOne()

        /*
            主要用在所以显示的数据结构包括为0的都可以点击
        */
        var drawChatTwo = function() {
            myChart.clear()
            myChart.setOption(option);
            // 防止点击时触发多次事件
            myChart.getZr().off('click')
            // 添加柱状图点击事件
            myChart.getZr().on('click',function(params){
                console.log(params)
                let pointInPixel = [params.offsetX, params.offsetY]
                if (myChart.containPixel('grid', pointInPixel)) {
                    // 拿到点击当前图表对应的下标
                    let xIndex = myChart.convertFromPixel({ seriesIndex: 0 }, [params.offsetX, params.offsetY])[0]
                    //点击的柱子的名称
                    checkName = obj.xAxis[xIndex]
                }
               //柱形图重构
               myChart.setOption(option);
               document.getElementById('text').innerHTML = checkName
            })
        }
        // drawChatTwo()
    </script>
</body>
</html>
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜天生i

如果本文对你有所帮助点赞就好~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值