google chart显示全部顶点的tooltip

2012-9-18更新:IE9部分浏览器支持svg绘图,修改了获取路径的方法。由于IE得到的path信息会多一些空格出来,改为用正则获取顶点信息
 

  今天在csdn看到一个使用google chart绘制LineChart图标,需要提示显示全部显示出来,而不是当鼠标悬浮到顶点的时候才显示提示信息tooltip。
 

  下午看了下google chart的api文档,没有发现有显示全部提示信息的配置项目,隐藏提示信息tooltip的配置项目到是有一个: tooltip:{trigger:'none'},trigger默认有2个配置值,一个是'none',不显示tooltip;一个是hover,鼠标移动到顶点的时候显示。
 

  研究了下google chart生成的HTML结构后,google chart将canvas或者vml绘制在一个iframe里面。
 

  解决方法:获取iframe里面的vml或者canvas的曲线图路径配置,然后使用js+div模拟。canvas为path,IE为v:shape对象【有多个,需要遍历对象数组获取到绘制的路径对象。】
 

  源代码如下,下面代码自己保存为html文件查看,运行代码加载google chart api时出错。

<html>
  <head>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <style type="text/css">
    .pop{border:solid 1px #000;width:100px;height:50px;position:absolute;z-index:10000}/*可以增加背景图片什么的美化一下tooltip*/
    </style>
    <script type="text/javascript">
        google.load("visualization", "1", { packages: ["corechart"] });
        google.setOnLoadCallback(drawChart);
        var chart, canvas, data = [['Year', 'Sales'], ['2004', 1000], ['2005', 1170], ['2006', 660], ['2007', 1030]];
        function getPath() {
            var doc = document.getElementById('chart_div').getElementsByTagName('iframe')[0].contentWindow.document;
            if (doc.readyState == 'complete') {
                clearInterval(window.timer);
                var vml = doc.body.innerHTML.toLowerCase().indexOf('<svg')==-1, line = doc.getElementsByTagName(vml ? 'shape' : 'path');
                if (vml) {
                    for (var i = 0, j = line.length; i < j; i++)
                        if (line[i].getAttribute('logicalname') == 'line#0') { line = line[i]; break; }
                }
                else line = line[0];
                drawTooltip(vml ? line.path.value : line.getAttribute('d'));
            }
        }
        function drawTooltip(p) {
            var points = p.match(/\d+(\.\d+)?/g), pop, dv = document.getElementById('chart_div'), idx = 1,dataItem;
            for (var i = 0, j = points.length; i < j; i += 2) {
                pop = document.createElement('div');
                pop.className = 'pop';
                pop.style.left = points[i] + 'px';
                pop.style.top = points[i + 1] + 'px';
                dataItem = data[idx];
                idx++;
                pop.innerHTML = 'Year:' + dataItem[0]+'<br/>'+dataItem[1];
                dv.appendChild(pop);
            }
        }
        function drawChart() {
            var data = google.visualization.arrayToDataTable(window.data);
            var options = { title: 'Company Performance', tooltip: {trigger:'none'} };
            chart = new google.visualization.LineChart(document.getElementById('chart_div'));
            chart.draw(data, options);
            // google.visualization.events.addListener(chart, 'ready', function () {});//IE不触发ready事件,只好用计时器来检查iframe的readystate了
            window.timer = setInterval(getPath, 500);
        }
    </script>
  </head>
  <body>
    <div id="chart_div" style="width: 900px; height: 500px;position:relative;"></div>
  </body>
</html>

 

加支付宝好友偷能量挖...


原创文章,转载请注明出处:google chart显示全部顶点的tooltip

评论(0)Web开发网
阅读(260)喜欢(0)JavaScript/Ajax开发技巧