jQuery UI选项卡和Highcharts显示/呈现问题

Bri*_*ian 17 jquery-ui-tabs highcharts

有没有人一起使用了tabs(jquery-ui-1.8.9)和饼图Highcharts 2.1.4?简单来说,我有多个标签,每个标签显示一个包含不同数据的饼图.图表会渲染到div,但是当我点击第二个标签时,图表会以某种方式显示300px在它所假设的位置的右​​侧.每当我放大或缩小浏览器窗口时,图表都会返回到校正位置.

我的代码:

//假设数字选项卡是基于变量$ count生成的,并且有2个选项卡

<script type="text/javascript">

var chart_tab_<?=count?>;

$(document).ready(function() {
    chart_tab_<?=count?> = new Highcharts.Chart({
      chart: {
         renderTo: 'chart_tab_<?=count?>',
         // blah blah
      }

<body>
    <div id="chart_tab_<?=count?>"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

再次,图表呈现,但在第二个选项卡上显示错误.

更新:我知道这个KIND OF解决了这个问题:

<script type="text/javascript"> 
   $(document).ready(function() {
      $( "#tabs" ).tabs({
          cookie: { expires: 1 }
      });
      $( "#tabs" ).tabs({
          select: function(event, ui) { window.location.reload(); }
      });
   });
Run Code Online (Sandbox Code Playgroud)

但它真的很糟糕,因为每次用户点击选项卡时都必须重新加载页面.任何想法都会很棒.

Lor*_*son 12

这是我的解决方案(仅在Safari和Firefox中测试过).如果要将图表加载到页面上具有灵活宽度的隐藏选项卡,则效果很好.如果调整浏览器窗口大小,则会调整图表大小.

在图表设置中,从页面加载时打开的选项卡设置图表的宽度(使用jQuery获取宽度):

   var chart = new Highcharts.Chart({
     chart: {
       renderTo: 'container',
       type: 'column',
       width: $('#tab-1').width()
     },
     ....
Run Code Online (Sandbox Code Playgroud)

如果调整浏览器窗口大小,以下函数会调整宽度.500是高度.如果未在图表选项中指定宽度,则会自动完成此操作.

$(window).resize(function() {
   chart.setSize($('#chart_tab').width(),500);       
});
Run Code Online (Sandbox Code Playgroud)


小智 6

为了使Highcharts在隐藏的jQuery选项卡中工作所需的修改.默认情况下,jQuery将display:none设置为隐藏选项卡,但是使用这种方法,Highcharts无法获得元素的真实宽度和高度.因此,我们绝对定位它并将其从视口移开.

 <style type="text/css">
.ui-tabs .ui-tabs-hide {
     position: absolute;
     top: -10000px;
     display: block !important;
}           
 </style>
Run Code Online (Sandbox Code Playgroud)

添加示例:http: //www.highcharts.com/studies/jquery-ui-tabs.htm


ojr*_*ore 4

第二个图表可能会关闭,因为听起来它在绘制时被隐藏了。尝试在选择后绘制图表。

这是一些伪代码,可以让您了解我的想象。这个没有经过测试。

$("#tabs").tabs({
  select: function(event, ui) {
     var chart = new Highcharts.Chart({
      chart: {
       renderTo: ui.panel.id,
       // blah blah
      }
     });

  }
});
Run Code Online (Sandbox Code Playgroud)