【问题标题】:Remove Tooltip in Synchronized Charts, When user leaves the chart area删除同步图表中的工具提示,当用户离开图表区域时
【发布时间】:2016-03-11 04:13:03
【问题描述】:

我正在使用 Highcharts 的同步图表来展示统计数据。 供参考:http://www.highcharts.com/demo/synchronized-charts.

在这里,当第一次绘制图表时,没有选择任何数据点。随着光标进入图表区域,工具提示、十字准线和数据点被突出显示。它按预期工作。

我需要的修改是,当用户从图表中出来时,图表应该看起来像在加载阶段。

即如果光标不在任何图表上,则不应选择任何数据点。换句话说,工具提示、十字准线和数据点上突出显示的阴影应该被移除。

提前感谢您的任何帮助或建议。

【问题讨论】:

    标签: javascript jquery charts highcharts


    【解决方案1】:

    使用 mouseleave 检测鼠标何时离开容器:

    $('#container').bind('mouseleave', function(e) {
    

    使用 hide 方法隐藏工具提示,使用 hide Crosshair 方法隐藏十字准线:

      chart.tooltip.hide(point);
      chart.xAxis[0].hideCrosshair();  
    

    查看示例 (jsfiddle):

    $(function() {
    
    
      $('#container').bind('mouseleave', function(e) {
        var chart,
          point,
          i,
          event;
    
        for (i = 0; i < Highcharts.charts.length; i = i + 1) {
          chart = Highcharts.charts[i];
          event = chart.pointer.normalize(e.originalEvent);
          point = chart.series[0].searchPoint(event, true);
    
          point.onMouseOut(); 
          chart.tooltip.hide(point);
          chart.xAxis[0].hideCrosshair(); 
        }
      });
      $('#container').bind('mousemove touchmove touchstart', function(e) {
        var chart,
          point,
          i,
          event;
    
        for (i = 0; i < Highcharts.charts.length; i = i + 1) {
          chart = Highcharts.charts[i];
          event = chart.pointer.normalize(e.originalEvent); // Find coordinates within the chart
          point = chart.series[0].searchPoint(event, true); // Get the hovered point
    
          if (point) {
            point.onMouseOver(); // Show the hover marker
            chart.tooltip.refresh(point); // Show the tooltip
            chart.xAxis[0].drawCrosshair(event, point); // Show the crosshair
          }
        }
      });
      /**
       * Override the reset function, we don't need to hide the tooltips and crosshairs.
       */
      Highcharts.Pointer.prototype.reset = function() {
        return undefined;
      };
    
      /**
       * Synchronize zooming through the setExtremes event handler.
       */
      function syncExtremes(e) {
        var thisChart = this.chart;
    
        if (e.trigger !== 'syncExtremes') { // Prevent feedback loop
          Highcharts.each(Highcharts.charts, function(chart) {
            if (chart !== thisChart) {
              if (chart.xAxis[0].setExtremes) { // It is null while updating
                chart.xAxis[0].setExtremes(e.min, e.max, undefined, false, {
                  trigger: 'syncExtremes'
                });
              }
            }
          });
        }
      }
    
      // Get the data. The contents of the data file can be viewed at
      // https://github.com/highcharts/highcharts/blob/master/samples/data/activity.json
      $.getJSON('https://www.highcharts.com/samples/data/jsonp.php?filename=activity.json&callback=?', function(activity) {
        $.each(activity.datasets, function(i, dataset) {
    
          // Add X values
          dataset.data = Highcharts.map(dataset.data, function(val, j) {
            return [activity.xData[j], val];
          });
    
          $('<div class="chart">')
            .appendTo('#container')
            .highcharts({
              chart: {
                marginLeft: 40, // Keep all charts left aligned
                spacingTop: 20,
                spacingBottom: 20
              },
              title: {
                text: dataset.name,
                align: 'left',
                margin: 0,
                x: 30
              },
              credits: {
                enabled: false
              },
              legend: {
                enabled: false
              },
              xAxis: {
                crosshair: true,
                events: {
                  setExtremes: syncExtremes
                },
                labels: {
                  format: '{value} km'
                }
              },
              yAxis: {
                title: {
                  text: null
                }
              },
              tooltip: {
                positioner: function() {
                  return {
                    x: this.chart.chartWidth - this.label.width, // right aligned
                    y: -1 // align to title
                  };
                },
                borderWidth: 0,
                backgroundColor: 'none',
                pointFormat: '{point.y}',
                headerFormat: '',
                shadow: false,
                style: {
                  fontSize: '18px'
                },
                valueDecimals: dataset.valueDecimals
              },
              series: [{
                data: dataset.data,
                name: dataset.name,
                type: dataset.type,
                color: Highcharts.getOptions().colors[i],
                fillOpacity: 0.3,
                tooltip: {
                  valueSuffix: ' ' + dataset.unit
                }
              }]
            });
        });
      });
    });
    

    【讨论】:

    • 我不知道为什么,但对我来说,离开图表时它不会删除悬停点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    相关资源
    最近更新 更多