2012-12-07 24 views
17

Ho un diagramma alto che ridimensiona la larghezza beatuifully quando la finestra cambia dimensione. Ma non all'altezza. Ho provato questo formato grafico ma non funziona proberamente. C'è un altro modo per cambiare automaticamente l'altezza quando le dimensioni della finestra cambiano?Ridimensiona altezza con Highcharts

Questo è il mio codice css per l'output. Ho una scheda di jQuery UI, l'altra scheda sta mostrando DataTable

#output-container 
{ 
float: right; 
display: inline; 
position: absolute; 
right: 10px; 
left: 400px; 
top:120px; 
overflow-y: auto; 
} 

Questo è il mio css per la chartdiv:

#chartContainer{ 
margin: auto; 
} 

E questa è la funzione js Grafico:

function qchart(){ 

    chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'chartContainer', 
      type: 'column', 
      spacingBottom: 3, 
      //height: (screen.availHeight)-500, 
      marginRight: 30, 
      marginBottom: 30, 
      reflow: true 
     }, 
     //etc.. 
    }; 
    //... 
} 
+1

possibile duplicato di [Grafici elevati: come avere un grafico con altezza dinamica?] (http://stackoverflow.com/questions/8809852/highc harts-how-to-have-a-chart-con-dinamico-altezza) –

+0

Per regolare i grafici nascosti e sulla finestra risize [Vedere la mia risposta StackOverflow] [1] [1]: http: //stackoverflow.com/questions/16216722/highcharts-hidden-charts-dont-get-re-size-properly/25083192#25083192 – Davide

risposta

30

risposta di Ricardo è corretta, però: a volte si può trovare in una situazione in cui il contenitore semplicemente non ridimensiona, se lo desideri come la finestra del browser cambia dimensione, quindi non consente il ridimensionamento di diagrammi highchart.

Funziona sempre:
1. Impostare un listener di eventi di ridimensionamento temporizzato e pipelined. Example with 500ms on jsFiddle
2. Uso chart.setSize(width, height, doAnimation = true); nella vostra funzione di ridimensionamento effettivo per impostare l'altezza e la larghezza in modo dinamico
3. Impostare reflow: false nelle Highcharts-opzioni e naturalmente impostare height e width esplicitamente sulla creazione. Poiché eseguiremo la gestione degli eventi di ridimensionamento, non ci sarà bisogno di agganci di Highcharts in un altro.

+0

Sono abbastanza nuovo per i grafici alti e jQuery/JavaScript, puoi dare un esempio di codice da seguire? – newbie

16

Secondo l'API Riferimento:

By default the height is calculated from the offset height of the containing element. Defaults to null.

Quindi, è possibile controllare è height in base al div padre utilizzando l'evento redraw, che viene chiamato quando cambia le sue dimensioni.

Riferimenti

+0

Quindi, perché downvote? Qualche suggerimento ? –

+5

Scuse sincere - ho appena ripeterlo e sembra che se ridimensioni correttamente il contenitore genitore immediato funzioni effettivamente. Non posso riprendere il mio downvote (il sistema dice "il voto è ora bloccato a meno che il post non sia stato modificato"), se modifichi una linea o due la riprenderò sicuramente. – Philzen

0

Ho avuto un problema simile con altezza tranne il mio schema era all'interno di un popup modale bootstrap, che ho' m già controllando la dimensione di con css. Tuttavia, per qualche motivo quando la finestra è stata ridimensionata orizzontalmente, l'altezza del contenitore del grafico si espanderebbe indefinitamente. Se si dovesse trascinare la finestra avanti e indietro, si espanderebbe verticalmente all'infinito. Inoltre, non mi piacciono le soluzioni di altezza/larghezza codificate.

Quindi, se stai facendo questo in modale, combinare this solution con un evento di ridimensionamento della finestra.

// from link 
$('#ChartModal').on('show.bs.modal', function() { 
    $('.chart-container').css('visibility', 'hidden'); 
}); 

$('#ChartModal').on('shown.bs.modal.', function() { 
    $('.chart-container').css('visibility', 'initial'); 
    $('#chartbox').highcharts().reflow() 
    //added 
    ratio = $('.chart-container').width()/$('.chart-container').height(); 
}); 

Dove "ratio" diventa un rapporto di aspetto altezza/larghezza, che verrà ridimensionata quando il modal bootstrap ridimensiona. Questa misurazione viene eseguita solo quando viene aperto il modale. Sto memorizzando il rapporto come globale ma probabilmente non è la migliore pratica.

$(window).on('resize', function() { 
    //chart-container is only visible when the modal is visible. 
    if ($('.chart-container').is(':visible')) { 
     $('#chartbox').highcharts().setSize( 
      $('.chart-container').width(), 
      ($('.chart-container').width()/ratio), 
      doAnimation = true); 
    }  
}); 

Quindi, con questo, è possibile trascinare lo schermo di lato (ridimensionamento) e il grafico manterrà le proporzioni.

Widescreen

enter image description here

vs piccolo

enter image description here

(ancora trafficando con le unità di VW, quindi tutto nella parte posteriore è troppo piccola per leggere lol!)

Problemi correlati