Trigger google timeline tooltip with selection

后端 未结 1 898
有刺的猬
有刺的猬 2020-12-22 01:30

I need to trigger the Timeline chart tooltip on selection instead of hover. This doesn\'t seem to work.

I get my tooltips if I have this in the chart options: toolt

相关标签:
1条回答
  • 2020-12-22 01:47

    The only supported trigger which will open a tooltip in a Timeline-chart is focus

    Possible workaround:

    google.setOnLoadCallback(drawVisualization);
    
    function drawVisualization() {
      var container = document.getElementById('timeline');
      var chart = new google.visualization.Timeline(container);
      var dataTable = new google.visualization.DataTable();
    
      dataTable.addColumn({
        type: 'string',
        id: 'President'
      });
      dataTable.addColumn({
        type: 'date',
        id: 'Start'
      });
      dataTable.addColumn({
        type: 'date',
        id: 'End'
      });
      dataTable.addRows([
        ['Washington', new Date(1789, 3, 30), new Date(1797, 2, 4)],
        ['Adams', new Date(1797, 2, 4), new Date(1801, 2, 4)],
        ['Jefferson', new Date(1801, 2, 4), new Date(1809, 2, 4)]
      ]);
      //select-handler
      google.visualization.events.addListener(chart, 'select', function(e) {
        //the built-in tooltip
        var tooltip = document.querySelector('.google-visualization-tooltip:not([clone])');
        //remove previous clone when there is any
        if (chart.ttclone) {
          chart.ttclone.parentNode.removeChild(chart.ttclone)
        }
        //create a clone of the built-in tooltip
        chart.ttclone = tooltip.cloneNode(true);
        //create a custom attribute to be able to distinguish
        //built-in tooltip and clone
        chart.ttclone.setAttribute('clone', true);
        //inject clone into document
        tooltip.parentNode.insertBefore(chart.ttclone, chart.tooltip);
      });
    
      chart.draw(dataTable, {tooltip: {isHtml: true }});
    }
    .google-visualization-tooltip {
      opacity: 0 !important;
      max-width: 200px !important;
    }
    .google-visualization-tooltip[clone] {
      opacity: 1 !important;
    }
    html,
    body,
    timeline {
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
    <script type="text/javascript" src="https://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1.1','packages':['timeline']}]}"></script>
    <div id='timeline' style="height:90%"></div>

    It still uses the default-behaviour(tooltip on focus). But the built-in tooltip is hidden(via CSS)

    In the select-handler it fetches the built-in tooltip out of the document(it's hidden, but it's still there) and creates a clone which will be injected into the document.

    0 讨论(0)
提交回复
热议问题