在Google图表中添加超链接到自定义工具提示 [英] Add hyperlink to custom tooltip in Google Charts

查看:103
本文介绍了在Google图表中添加超链接到自定义工具提示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用此解决方法,我可以模仿在选择时显示工具提示为谷歌时间表图表。这个问题是,我打算有一个邮件链接在工具提示供用户点击。但是,在我的函数 creatToolTip()中,创建了工具提示,但我无法点击联系链接。什么是这样做的正确方法?编辑:我也试过 Google的工具提示操作,但它在时间线图表中不受支持。

  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:'string',id:'Name'}); dataTable.addColumn({type:'string',role:'tooltip','p':{'html':true}}); dataTable.addColumn({type:'date',id:'Start'}); dataTable.addColumn({type:'date',id:'End'}); dataTable.addRows([['Washington','test',createToolTip(),new Date(1789,3,30),new Date(1797,2,4)],['Adams','test',createToolTip ),新日期(1797,2,4),新日期(1801,2,4)],['杰斐逊','测试',createToolTip(),新日期(1801,2,4),新日期(1809) ,2,4)]]); // select-handler google.visualization.events.addListener(chart,'select',function(e){//内置的工具提示var tooltip = document.querySelector('。google-visualization-tooltip:not([clone ])'); //当有任何if(chart.ttclone){chart.ttclone.parentNode.removeChild(chart.ttclone)}时,删除以前的克隆//创建内置工具提示图表的克隆.ttclone = tooltip .cloneNode(true); / /创建一个自定义属性,以便能够区分//内置的工具提示和克隆chart.ttclone.setAttribute('clone',true); //将克隆注入到文档tooltip.parentNode.insertBefore( chart.ttclone,chart.tooltip);}); chart.draw(dataTable,{tooltip:{isHtml:true}});} function createToolTip(){var mainDiv ='< div>'; var list ='< ul class =google-visualization-tooltip-action-list>'+'< li class =google-visualization-tooltip-action>'+'< span style = font-family:font-weight:bold;>'+'< a href =font-size:12px; color:rgb(0,0,0); margin:0px mailto:test@test.com?Subject = test>联系人< / a>'+'< / span>'+'< / li>'+'< / ul>'; var endMainDiv ='< / div>'; var tooltip = mainDiv + list + endMainDiv;返回工具提示; }  

.google-visualization-tooltip {opacity:0!重要; max-width:200px!important;}。google-visualization-tooltip [clone] {opacity:1!important;} html,body,timeline {width:100%;身高:100%;保证金:0; padding:0;}

< script src =https ://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js>< / script>< script type =text / javascriptsrc =https:// www ?.google.com / JSAPI自动加载= { '模块':[{ '名称': '可视化', '版本': '1.1', '包':[ '时间轴']}]}>< / script>< div id ='timeline'style =height:90%>< / div>

解决方案

看起来像指针事件默认设置为'none'

<在将克隆注入到dom之前,将其更改为'auto'

  //将克隆注入文档
chart.ttclone.style.pointerEvents ='auto';
tooltip.parentNode.insertBefore(chart.ttclone,chart.tooltip);

请参阅以下工作片段...



  

.google-visualization-tooltip {opacity:0!important; max-width:200px!important;}。google-visualization-tooltip [clone] {opacity:1!important;} html,body,timeline {width:100%;身高:100%;保证金:0; padding:0;}

< script src =https ://www.gstatic.com/charts/loader.js>< / script>< div id =timelinestyle =height:90%>< / div>


Using this workaround, I was able to mimic showing tooltip upon selection for a google timeline chart. This issue is that I plan on having a mail to link in the tooltip for the user to click on. However, in my function creatToolTip(), the tooltip is created but I'm unable to click on the contact link. What is the correct way to do this?

EDIT: I also tried Google's tooltip actions but it is not supported in timeline charts.

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: 'string', id: 'Name' });
  dataTable.addColumn({ type: 'string', role: 'tooltip', 'p': {'html': true}});
  dataTable.addColumn({
    type: 'date',
    id: 'Start'
  });
  dataTable.addColumn({
    type: 'date',
    id: 'End'
  });
  dataTable.addRows([
    ['Washington', 'test', createToolTip(), new Date(1789, 3, 30), new Date(1797, 2, 4)],
    ['Adams', 'test', createToolTip(), new Date(1797, 2, 4), new Date(1801, 2, 4)],
    ['Jefferson', 'test', createToolTip(), 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 }});
}

function createToolTip() {
       var mainDiv = '<div >';
       var list =
            '<ul class="google-visualization-tooltip-action-list">' +
                '<li class="google-visualization-tooltip-action">' +
                    '<span style="font-family: Arial; font-size: 12px; color: rgb(0, 0, 0); margin: 0px; text-decoration: none; font-weight: bold;">' +
                        '<a href="mailto:test@test.com?Subject=test">Contact</a>' +
                    '</span>' +
                '</li>' +
            '</ul>';
       var endMainDiv = '</div>';
       var tooltip = mainDiv + list + endMainDiv;
       return tooltip;
    }

.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 src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<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>

解决方案

looks like pointer-events are set to 'none' by default

change to 'auto' before injecting the clone back into the dom

//inject clone into document
chart.ttclone.style.pointerEvents = 'auto';
tooltip.parentNode.insertBefore(chart.ttclone, chart.tooltip);

see following working snippet...

google.charts.load('current', {
  callback: function () {
    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: 'string', id: 'Name' });
    dataTable.addColumn({ type: 'string', role: 'tooltip', 'p': {'html': true}});
    dataTable.addColumn({
      type: 'date',
      id: 'Start'
    });
    dataTable.addColumn({
      type: 'date',
      id: 'End'
    });
    dataTable.addRows([
      ['Washington', 'test', createToolTip(), new Date(1789, 3, 30), new Date(1797, 2, 4)],
      ['Adams', 'test', createToolTip(), new Date(1797, 2, 4), new Date(1801, 2, 4)],
      ['Jefferson', 'test', createToolTip(), 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
      chart.ttclone.style.pointerEvents = 'auto';
      tooltip.parentNode.insertBefore(chart.ttclone, chart.tooltip);
    });

    function createToolTip() {
       var mainDiv = '<div style="z-index: 1000;">';
       var list =
            '<ul class="google-visualization-tooltip-action-list">' +
                '<li class="google-visualization-tooltip-action">' +
                    '<span style="font-family: Arial; font-size: 12px; color: rgb(0, 0, 0); margin: 0px; text-decoration: none; font-weight: bold;">' +
                        '<a href="mailto:test@test.com?Subject=test">Contact</a>' +
                    '</span>' +
                '</li>' +
            '</ul>';
       var endMainDiv = '</div>';
       var tooltip = mainDiv + list + endMainDiv;
       return tooltip;
    }

    chart.draw(dataTable, {tooltip: {isHtml: true }});
  },
  packages: ['timeline']
});

.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 src="https://www.gstatic.com/charts/loader.js"></script>
<div id="timeline" style="height:90%"></div>

这篇关于在Google图表中添加超链接到自定义工具提示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆