在Fancybox中显示Google Visualization API(JS弹出窗口)

时间:2011-10-21 15:20:28

标签: javascript jquery fancybox google-visualization

所以我基本上试图在Fancybox(JS弹出窗口)中嵌入Google Visualization图表。该图表在页面上正确显示..但不在fancybox中。有什么想法吗?

这是我正在使用的代码

 $(".class").fancybox(function() { 

      drawChart();

 });

---编辑---

 $(".view_research").fancybox({

 'onStart'   : drawChart

 });

**此编辑也不起作用,但至少使用fancybox

允许的其中一个参数

单击链接时会显示fancybox加载图像..但实际弹出窗口从不加载。

我还应该注意,如果我从弹出窗口试图加载的页面中删除Google图表,弹出窗口会毫不费力地加载。

提前致谢, 菲尔

2 个答案:

答案 0 :(得分:2)

为了实现这一目标,您需要:

  1. 使用fancybox调用的onComplete选项
  2. 明确指定将绘制图表的div的宽度和高度样式属性
  3. 在尝试将图表放入其中之前,使用gviz来显示div是常见的,否则你最终可能会看到一些非常奇怪的图表(不确定当你尝试渲染图表时会发生什么事情)一个看不见的div ..)。 onComplete会解决这个问题。在其他情况下,使用gviz图像库是解决该问题的一种很好的解决方法。

    无论如何,这是一个使用fancybox和gviz的例子(饼图代码取自google code playground):

      <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
          <script type="text/javascript" src="http://www.google.com/jsapi"></script>
          <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
          <script type="text/javascript" src="http://fancybox.net/js/fancybox-1.3.4/jquery.fancybox-1.3.4.js"></script>
          <link rel="stylesheet" href="http://fancybox.net/js/fancybox-1.3.4/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />
          <script type="text/javascript">
              google.load('visualization', '1', {packages: ['piechart']});
          </script>
          <script type="text/javascript">
          </script>
          <script>
    
          function drawVisualization() {
            var data = new google.visualization.DataTable();
            data.addColumn('string', 'Task');
            data.addColumn('number', 'Hours per Day');
            data.addRows(5);
            data.setValue(0, 0, 'Work');
            data.setValue(0, 1, 11);
            data.setValue(1, 0, 'Eat');
            data.setValue(1, 1, 2);
            data.setValue(2, 0, 'Commute');
            data.setValue(2, 1, 2);
            data.setValue(3, 0, 'Watch TV');
            data.setValue(3, 1, 2);
            data.setValue(4, 0, 'Sleep');
            data.setValue(4, 1, 7);
            // Create and draw the visualization.
            new google.visualization.PieChart(document.getElementById('data')).draw(data);
          }
    
          $(document).ready(function() {
            $("a#inline").fancybox({
              'hideOnContentClick': true,
              onComplete: drawVisualization
            });
          });
    
          </script>
        </head>
        <body>
          <a id="inline" href="#data">Click here to see chart</a>
          <div style="display:none"><div style='height:200px;width:200px' id="data"></div></div>
        </body>
      </html>
    

答案 1 :(得分:0)

drawChart函数必须专门将图表绘制到由fancybox创建的弹出窗口中,只需调用回调函数内部的函数就不会有任何好处。