<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Plots in Hidden Containers</title> <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]--> <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" /> <link rel="stylesheet" type="text/css" href="examples.css" /> <style type="text/css"> .ui-tabs-nav, .ui-accordion-header { font-size: 12px; } .ui-tabs-panel, .ui-accordion-content { font-size: 14px; } .jqplot-target { font-size: 18px; } body > table { width: 700px; margin-left:auto; margin-right: auto; } body > table, body > table > tr, body > table > td { width: 700px; border none; } td>p { font-family:"Trebuchet MS",Arial,Helvetica,sans-serif; font-size: 14px; } </style> <!-- BEGIN: load jquery --> <script language="javascript" type="text/javascript" src="../jquery.js"></script> <!-- END: load jquery --> <!-- BEGIN: load jqplot --> <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script> <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script> <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script> <script language="javascript" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.js"></script> <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script> <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.6.custom.css" rel="Stylesheet" /> <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.6.custom.min.js"></script> <!-- END: load jqplot --> <script type="text/javascript" language="javascript"> $(document).ready(function(){ $.jqplot.config.enablePlugins = false; l1 = [18, 36, 14, 11]; l2 = [[2, 14], [7, 2], [8,5]]; l3 = [4, 7, 9, 2, 11, 5, 9, 13, 8, 7]; l4 = [['peech',3], ['cabbage', 2], ['bean', 4], ['orange', 5]]; // plot will size to the "data-width" and "data-height" attributes var options = { title: "I was hidden", lengend:{show:true}, series:[{},{yaxis:'y2axis'}, {yaxis:'y3axis'}], cursor:{show:true, zoom:true}, axesDefaults:{useSeriesColor:true} } $("#tabs").tabs(); $("#accordion").accordion(); plot1 = $.jqplot('chart1', [l1, l2, l3], options); plot2 = $.jqplot('chart2', [l4], { height: 200, width: 300, series:[{renderer:$.jqplot.PieRenderer}], legend:{show:true} }); var catOHLC = [[1, 138.7, 139.68, 135.18, 135.4], [2, 143.46, 144.66, 139.79, 140.02], [3, 140.67, 143.56, 132.88, 142.44], [4, 136.01, 139.5, 134.53, 139.48], [5, 143.82, 144.56, 136.04, 136.97], [6, 136.47, 146.4, 136, 144.67], [7, 124.76, 135.9, 124.55, 135.81], [8, 123.73, 129.31, 121.57, 122.5]]; var ticks = ['Tue', 'Wed', 'Thu', 'Fri', 'Mon', 'Tue', 'Wed', 'Thr']; plot3 = $.jqplot('chart3',[catOHLC],{ grid:{ drawGridlines:true}, title: 'A CandleStick Chart', axes: { xaxis: { renderer:$.jqplot.CategoryAxisRenderer, ticks:ticks }, yaxis: { tickOptions:{formatString:'$%.2f'} } }, series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}] }); $('#tabs').bind('tabsshow', function(event, ui) { if (ui.index == 1 && plot1._drawCount == 0) { plot1.replot(); } else if (ui.index == 2 && plot2._drawCount == 0) { plot2.replot(); } }); $('#accordion').bind('accordionchange', function(event, ui) { var index = $(this).find("h3").index ( ui.newHeader[0] ); if (index == 1) { plot3.replot(); } }); }); </script> </head> <body> <?php include "nav.inc"; ?> <table><tr><td> <p>This page demonstrates using plots within containers that are initially hidden. Examples are shown for jQuery UI tabs and Accordions</p> <div id="tabs"> <ul> <li><a href="#tabs-1">Tab 1</a></li> <li><a href="#tabs-2">Tab 2</a></li> <li><a href="#tabs-3">Tab 3</a></li> </ul> <div id="tabs-1"> <p>Tab 2 and tab 3 contain plots which are initially hidden. Using a combination of alternate sizing specification and the plots "replot" method the plots are properly displayed when their containers are shown.</p> <p>The alternate sizing specifications for setting plot height and width are needed because a hidden element (or child of a hidden element) has no size. The first example in tab 2 uses custom "data-height" and "data-width" attributes on the plot target element to specify height. The second example uses "width" and "height" properties specified on the options object passed into the $.jqplot() function.</p> <p>The default size is 300px wide by 400px high. The default setting can be overriden by specifying different values to the $.jqplot.config.defaultHeight and $.jqplot.config.defaultWidth properties. Height and width values are taken in this order of prececence:</p> <ol> <li>The css properties if available and plot is not hidden with display:none.</li> <li>Options object passed into the $.jqplot() function.</li> <li>Custom data-height and data-width attributes on the plot target.</li> <li>The config defaults.</li> </ol> <p>Here is how the replot method can be used to bind to the "tabsshow" event of the UI tabs:</p> <pre> $('#tabs').bind('tabsshow', function(event, ui) { if (ui.index == 1) { plot1.replot(); } else if (ui.index == 2) { plot2.replot(); } }); </pre> <p>The ui.index property is the index of the tab that was shown. </p> </div> <div id="tabs-2"> <p>This plot was in an initially hidden container. It's hieght and width are set by the "data-height" and "data-width" properties of the plot container.</p> <div id="chart1" data-height="260px" data-width="480px" style="margin-top:20px; margin-left:20px;"></div> </div> <div id="tabs-3"> <p>This plot is in an initially hidden container. It's height and width are set by the 'height' and 'width' properties of the options object passed into the plot constructor.</p> <div id="chart2" style="margin-top:20px; margin-left:20px;"></div> </div> </div> <div id="accordion" style="margin-top:50px"> <h3><a href="#">Section 1</a></h3> <div> <p>Secion 2 contains a plot. Sizing plots in hidden accordion sections is very similar to sizing in a tab widget. Because of the default animation on accordions, however, the plot will not draw itself until the entire accordion panel is shown.</p> <p>Binidng to the accordion "accordionchange" event is also similar as with tabs:</p> <pre> $('#accordion').bind('accordionchange', function(event, ui) { var index = $(this).find("h3").index ( ui.newHeader[0] ); if (index == 1) { plot3.replot(); } }); </pre> </div> <h3><a href="#">Section 2</a></h3> <div> <p> This plot also has it's height and width set with the data-height and data-width attributes. Note, if you want the accordian widget to properly size itself </em>before</em> the plot is shown, you must also specify a css height and width on the plot target. </p> <div id="chart3" data-height="200" data-width="400" style="width:400px; height: 200px; margin-top: 20px; margin-left: 20px"></div> </div> </div> </td></tr></table> </body> </html>