2016-07-14 80 views
1

我有以下HTML:Highcharts大小不上div.animate()改变

<div class="chartDiv"> 
    <div id="chartContainer"></div> 
</div> 

和CSS:

$("#chartContainer").highcharts({ 
    .... 
}); 

.chartDiv { 
    position: absolute; 
    height: 1280px; 
    width: 720px; 
    top:0px; 
    left:0px; 
} 
#chartContainer { 
    position:absolute; 
    height:100%; 
    width:100%; 
} 

我有一个Highchart通过启动

现在我想改变chartDiv的大小和位置:

$(".chartDiv").animate({ 
    top: "100px", 
    left: "100px", 
    width: "640px", 
    height: "360px" 
)}; 

正如预期的那样,chartContainer会相应地更改其大小,但Highcart的大小保持不变。我解释说,如果没有其他声明被声明,它会自动更改为其父级大小,但事实并非如此。这是由于使用.animate图表不反应?理想情况下,由于chartDiv具有边界,因此该图表将与其父项一起生成动画,如果它首先进行动画处理,然后是图表(现在甚至不是这种情况),则该图表看起来很糟糕。

回答

0

如果您检查浏览器开发工具中的元素,您会发现highcharts正在设置内联样式。为了用外部CSS覆盖它们,你需要取出你的“!important”棒。要改变由高图形创建的内部div的大小并以其内联确定高度和宽度,它将需要直接定位,新值将需要“!important”来覆盖highcharts计算的开始值。

0

请有关此http://jsfiddle.net/devanshumadan/jqqz6vvm/6/

var seriesData = null; 
 

 
setTimeout(function(){ 
 
$(".chartDiv").animate({ 
 
    top: "100px", 
 
    left: "100px", 
 
    width: "640px", 
 
    height: "360px" 
 
}); 
 
}, 10000); 
 

 
setInterval(function(){ 
 
console.dir($('#chartContainer').highcharts().series); 
 
seriesData = [((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1), ((Math.random() * 30) + 1)]; 
 
var chart = $('#chartContainer').highcharts(); 
 
     chart.series[0].setData(seriesData, false); 
 
$('#chartContainer').highcharts().redraw(); 
 
}, 5000); 
 

 
$(function() { 
 
    $('#chartContainer').highcharts({ 
 
     title: { 
 
      text: 'Monthly Average Temperature', 
 
      x: -20 //center 
 
     }, 
 
     subtitle: { 
 
      text: 'Source: WorldClimate.com', 
 
      x: -20 
 
     }, 
 
     xAxis: { 
 
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
 
       'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
 
     }, 
 
     yAxis: { 
 
      title: { 
 
       text: 'Temperature (°C)' 
 
      }, 
 
      plotLines: [{ 
 
       value: 0, 
 
       width: 1, 
 
       color: '#808080' 
 
      }] 
 
     }, 
 
     tooltip: { 
 
      valueSuffix: '°C' 
 
     }, 
 
     series: [{ 
 
      name: 'Tokyo', 
 
      data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] 
 
     }] 
 
    }); 
 
    
 
});
.chartDiv { 
 
    position: absolute; 
 
    height: 1280px; 
 
    width: 720px; 
 
    top:0px; 
 
    left:0px; 
 
} 
 
#chartContainer { 
 
    position:absolute; 
 
    height:100%; 
 
    width:100%; 
 
}
<script src="https://code.highcharts.com/highcharts.js"></script> 
 
<script src="https://code.highcharts.com/modules/exporting.js"></script> 
 
<div class="chartDiv"> 
 
    <div id="chartContainer"></div> 
 
</div>

+0

这我试过了,但它不工作。图表没有任何反应。据我所知,如果没有其他说明,则回流应该是真实的,因此当母公司调整大小时调整大小。 – simtaxman

+0

这里是一个更新的小提琴在这: http://jsfiddle.net/devanshumadan/jqqz6vvm/ –

+0

所以这会创建图表后调整大小的权利?问题在于,如果我想以特定的时间间隔更改图表中的信息,但是在另一个时间间隔中更改大小而不会相互干扰。如果在调整大小时创建图表,我将看不到以特定间隔显示的所有图表。 – simtaxman

2

更新的解决方案如你发现,Highcharts可视化可能会非常棘手调整,而reflow()功能并不总是有益的或者合适的解决方案。

我不确定您是否注意到了,但是如果您调整了浏览器窗口的大小,图表的确会重塑为其包含的div。你想要做的就是模仿Highcharts的原生能力来调整这种方式。

在您的animate函数中,我添加了一个setSize()函数来基本上将图表重置为包含div的新维度。

$(".chartDiv").animate({ 
    top: "100px", 
    left: "100px", 
    width: "640px", 
    height: "360px" 
}, function() { 
    $('#chartContainer').highcharts().setSize(
     $(".chartDiv").width(), // new width of the containing div 
     $(".chartDiv").height(), // new height of the containing div 
     false // don't animate the chart itself changing 
    ); 
}); 

这里是你的代码上的jsfiddle工作版本(基于Highcharts演示之一),显示这是如何工作的:http://jsfiddle.net/brightmatrix/02hr0wqs/

我希望这有助于您!

更新(2016年7月18日):每对我的回答原来的海报的评论,我在setSize()加入false参数,以防止图表本身从它的大小时动画。您还可以在animate()之后添加一个整数作为第二个参数,在声明顶部,左侧等尺寸之后并在包含setSize()的函数之前调整包含div元素的动画。

+0

这实际上是工作,谢谢。虽然有一个问题是它会按顺序发生,但是使ChartDiv(带边框)首先调整大小,然后再调整Highchart,尤其是在反方向时增加大小。 – simtaxman

+0

@simtaxman我做了一个调整,在我的小提琴和上面的答案中,都希望能够减少动画中的不和谐。让我知道这是否有用。 –

+0

它在缩小尺寸时有效,但在缩小尺寸时不起作用。然后,在图表动画之前,div变大。由于我对div有影子,我希望它们都能同时进行动画制作。 – simtaxman