堆叠折线图高亮交互

文章介绍了如何在Highcharts中修改默认的图例交互行为,当所有堆叠折线都显示时,点击某一条折线的图例会高亮显示该折线并隐藏其他折线,而不是默认的置灰和消失效果。

今天项目中遇到一个需求,和Highcharts与Echarts默认的交互不同。

想要实现:当所有堆叠折线图中,所有的折线都显示的时候,点击某一条折线的图例,突出显示该折线。

Highcharts、Echarts定义的原有动作:

当堆叠折线图的图例都点亮的时候,点击某一个图例,则当前图例置灰,当前折线消失。如下图:

想要实现的动作:

当堆叠折线图的图例都点亮的时候,点击某一个图例,其它图例置灰,其它折线消失。如下图:

 

主要代码

懒得解释了,自己看吧

 完整代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"><link rel="icon" href="https://jscdn.com.cn/highcharts/images/favicon.ico">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
            /* css 代码  */
        </style>
        <script src="https://code.hcharts.cn/highcharts/highcharts.js"></script>
        <script src="https://code.hcharts.cn/highcharts/modules/exporting.js"></script>
        <script src="https://code.hcharts.cn/highcharts/modules/series-label.js"></script>
        <script src="https://code.hcharts.cn/highcharts/modules/oldie.js"></script>
        <script src="https://code.hcharts.cn/plugins/zh_cn.js"></script>
    </head>
    <body>
        <div id="container" style="max-width:800px;height:400px"></div>
        <script>
            var chart = Highcharts.chart('container', {
              title: {
                  text: '2010 ~ 2016 年太阳能行业就业人员发展情况'
              },
              subtitle: {
                  text: '数据来源:thesolarfoundation.com'
              },
              yAxis: {
                  title: {
                      text: '就业人数'
                  }
              },
              legend: {
                  layout: 'vertical',
                  align: 'right',
                  verticalAlign: 'middle'
              },
              plotOptions: {
                  series: {
                      label: {
                          connectorAllowed: false
                      },
                      pointStart: 2010,
                      events: {
                        legendItemClick: function(e) {
                          var index = this.index;
                          var series = this.chart.series;
                          // 默认除选中折线,其它所有折线图均显示
                          var othershow = true;
                          // 判断其它几个图标是不是均显示的
                          for(var i=0;i<series.length;i++) {
                            if(i !== index){
                              othershow = series[i].visible;
                              if(othershow == false){
                                break;
                              }
                            }
                          }

                          // 当前折线不显示的时候,点击显示
                          if(!series[index].visible) {
                            series[index].show();
                          }else{
                              if(othershow){ // 均显示,突出当前
                                for(var i=0;i<series.length;i++) {
                                    if(i !== index){
                                        series[i].hide();
                                    }
                                }
                              }else{// 没有均显示,隐藏当前
                                series[index].hide();
                              }
                          }

                          return false;
                        }
                      }
                  }
              },
              series: [{
                  name: '安装,实施人员',
                  data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175],
              }, {
                  name: '工人',
                  data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434],
              }, {
                  name: '销售',
                  data: [11744, 17722, 16005, 19771, 20185, 24377, 32147, 39387],
              }, {
                  name: '项目开发',
                  data: [null, null, 7988, 12169, 15112, 22452, 34400, 34227],
              }, {
                  name: '其他',
                  data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111],
              }],
              responsive: {
                  rules: [{
                      condition: {
                          maxWidth: 500
                      },
                      chartOptions: {
                          legend: {
                              layout: 'horizontal',
                              align: 'center',
                              verticalAlign: 'bottom'
                          }
                      }
                  }]
              }
          });

        </script>
    </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值