Чтобы заставить это работать, вам нужно:
- используйте опцию
onComplete
вызова fancybox
- явно указывает атрибут стиля ширины и высоты для div, в котором будет отображаться диаграмма
С gviz достаточно часто, чтобы div отображался / отображался перед тем, как пытаться вставить в него диаграмму, иначе вы можете получить довольно странные диаграммы (не уверен, что происходит, когда вы пытаетесь отобразить диаграмму в невидимый div ..). OnComplete позаботится об этом. Использование библиотеки изображений gviz - хороший способ решения этой проблемы в других случаях.
В любом случае, вот рабочий пример использования fancybox и gviz (код круговой диаграммы взят из google code plays ):
<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>