2014-08-27 8 views
7

Ich habe diese google chart on a my website. Es ist ein Streudiagramm für jetzt, aber ich möchte die Lösung für alle Arten von Diagrammen. Wenn Sie beispielsweise die Site mit einem 700-px-weiten Fenster laden, reagieren die Diagrammdimensionen nicht: Das Diagramm ist zu breit. Unten ist der Code, den ich verwende.Best Practice für responsive Google Charts

Können Sie mir helfen?

Dank

HTML:

<div id="chart_div"></div> 

CSS:

#chart_div { 
    width:100%; 
    height:20%; 
} 

JS:

var options = { 
     title: 'Weight of pro surfer vs. Volume of his pro model', 
     hAxis: {title: 'Weight (kg)', minValue: 53, maxValue: 100}, //55 
     vAxis: {title: 'Volume (l)'}, //, minValue: 20, maxValue: 40}, //20 
     legend: 'none', 
      width: '100%', 
      height: '100%', 
      colors: ['#000000'], 
      series: { 
        1: { color: '#06b4c8' }, 
       }, 
     legend: {position: 'top right', textStyle: {fontSize: 8}}, 
     chartArea: {width: '60%'}, 
      trendlines: { 0: {//type: 'exponential', 
        visibleInLegend: true, 
        color: 'grey', 
        lineWidth: 2, 
        opacity: 0.2, 
        labelInLegend: 'Linear trendline\n(Performance)' 
        } 
       } // Draw a trendline for data series 0. 
    }; 
    var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));   
    chart.draw(data, options); 
    google.visualization.events.addListener(chart, 'ready', myReadyHandler()); 

    function myReadyHandler() { 
     chartDrawn.resolve();  } 

Edit: Es scheint, dass die div #chart_div die richtige Größe hat (die eine, die ich s et mit CSS), aber die Grafik in diesem div seine Größe nicht anpassen ... es bleibt gesperrt mit Siehe das Bild: enter image description here

Antwort

8

Seit der Visualization API-Charts überhaupt nicht reagieren, müssen Sie behandeln alles auf eigene Faust. Normalerweise bedeutet dies, „die Größe“ Ereignis für das Fenster zu hören und das Diagramm neu zu zeichnen dann (alle Dimensionen als geeignete Einstellung): Code pen example of Google Charts Responsive tun Sie das Diagramm auf Fenster neu zu zeichnen:

function resize() { 
    // change dimensions if necessary 
    chart.draw(data, options); 
} 
if (window.addEventListener) { 
    window.addEventListener('resize', resize); 
} 
else { 
    window.attachEvent('onresize', resize); 
} 
+0

Dank für Ihre Antwort, aber jetzt bin ich nicht Veranstaltung darüber nachzudenken, die Anpassung der Plangröße, wenn Ändern der Größe des Windowns, aber nur, wenn die Website geladen wird ... um die Abmessungen beim Laden der Seite zu erhalten. Resignin die Fenster wird der nächste Schritt sein. Verstehst du ? – Louis

+0

Wenn Sie die Abmessungen des Container-DIV in CSS als Prozentwerte festlegen, wird die Größe des Diagramms basierend auf der Größe des Containers dynamisch festgelegt. – asgallant

+0

das habe ich mir gedacht und genau das mache ich schon: ich habe die frage mit dem html aktualisiert, damit du es sehen kannst. Wenn ich zum Beispiel den 'width' Wert von 100% auf 20% ändere, ändert sich die Größe des Graphen nicht. Sie check das hier: http://boardlineapp.com/#faq – Louis

-1

ich diesen Code Stift Beispiel nützlich gefunden mit jQuery die Größe:

$(window).resize(function(){ 
    yourCartdrawChartfuntion(); 
}); 
+0

Dies kann sehr schnell sehr schwer werden, da es bei jedem Pixel, dessen Fenstergröße angepasst wird, ausgelöst wird. Sie binden sich besser an das resize-Ereignis und lassen ein Timeout, um die Dinge ein wenig zu verlangsamen. – Alex

2

Für ansprechbar auf Last arbeitet:

#chart_div { 
width:inherit; 
height:inherit; 
} 

Altough es dosen't arbeiten, wenn sich die Bildschirmgröße während der Sitzung ändert.

2

put Breite 100% des Diagramms und rufen die Funktion, wie unten Resize

$(window).resize(function(){ 
    yourCallingChartFunction(); 
}); 
+0

Bitte geben Sie uns einige Informationen darüber, wo die Breite angegeben werden soll (Optionen, CSS oder anderswo) und was "getShotHistory" für uns bedeutet. Dieser Ausschnitt sagt uns nur, dass wir das Größenänderungs-Ereignis nicht mehr hören sollen. – Abdillah

+0

müssen Sie Ihre eigene Funktion anstelle von getShotHistory(); Ich habe mein eigenes erstellt. Sie müssen die Funktion aufrufen, in der Sie Diagrammfunktionalität erstellen. $ (Fenster) .resize (function() { yourChartFunction(); }); Sie müssen die Breite 100% in Ihrem chartChartFunction() angeben; –

+0

Ich gehe davon aus, dass Sie Bootstrap für das Responsive Design verwenden. Sie müssen das gesamte Diagramm Div innerhalb der anderen div mit einigen Klassen wie Col-sm-12 Col-Md-4, Col-lg-4 oder Col-Sm-12 Col-Md-6, Col-lg-6 was auch immer Sie will nach der Anforderung. –

0

Ein effizienteres Ändern der Größe Schnipsel ist unterhalb und wiederverwendbar ist;

1

Für mich funktionierte keiner der oben genannten oder sie waren zu komplex für mich, es zu versuchen.

Die Lösung, die ich gefunden habe, ist einfach und funktioniert perfekt. Es geht darum, ein normales Google-Diagramm zu erstellen, in meinem Fall ein Donut-Diagramm, und es dann mit CSS zu formatieren.

@media screen and (max-width: 1080px) { 
    div#donutchart { 
     zoom:0.6; 
     margin-left:-16%; 
    } 
} 

Das ist alles. Natürlich können Sie auch andere Werte für maximale Breite, Zoom und Ränder festlegen, damit Ihr Diagramm perfekt passt. Mein Diagramm ist 800x600 (you can see it here).

1

Wenn Sie Twitter Bootstrap verwenden, seit v3.2 Sie können nutzen die embed-responsive Stile:

<div class="embed-responsive embed-responsive-16by9"> 
    <div id="chart_div" class="embed-responsive-item"></div> 
</div> 

Oder wenn Sie 4: 3-Seitenverhältnis:

<div class="embed-responsive embed-responsive-4by3"> 
    <div id="chart_div" class="embed-responsive-item"></div> 
</div> 
+0

das scheint zu funktionieren, können Sie mich auf einige weitere Tipps Tutorials, die ich brauche, um es mit einem responsiven Piezo Overlay zu kombinieren und die Legende – alex

+0

oh und sollte Breite 100% sein? – alex

+0

@alex Wo würdest du 100% verwenden? –