2010-05-13 13 views
5

Ich benutze die Flot-Grafikbibliothek jQuery Plugin und ich habe keinen guten Weg gefunden, die Größe der Grafik zu ändern, wenn sie <div> Änderungen Größe enthält (zum Beispiel fällig Fenstergröße ändern). Bei der Verarbeitung des onresize-Ereignisses habe ich sichergestellt, dass die Breite und Höhe des enthaltenden <div> auf die richtige Größe aktualisiert wird. Anschließend wurde versucht, sowohl setupGrid aufzurufen als auch auf das Plot-Objekt zu zeichnen, aber ohne Wirkung. Ich hatte einige Erfolge mit dem Ansatz, nur das Enthaltene <div> zu entfernen und zu lesen und den Graph darin neu aufzuzeichnen. Dies scheint jedoch anfällig zu sein, in unendlichen Größenänderungs-Ereignisschleifen stecken zu bleiben, wenn ich dem Dokument gleichzeitig andere <div> Elemente hinzufügen muss (wie für Tooltips für das Diagramm), da ich vermute, dass sie auch Größenänderungs-Ereignisse auslösen können ? Gibt es einen guten Weg, damit umzugehen, dass ich vermisse?Wie ändert man die Größe eines Flot-Diagramms, wenn sein div Größe ändert

(Ich bin auch ExplorerCanvas für IE, um in der Lage zu verwenden Flot verwenden, wenn das könnte etwas damit zu tun hat. Ich habe in allen anderen Browsern noch nicht wirklich versucht)

Antwort

16

Ich habe festgestellt, nur die Bindung an die Größe Ereignis im Fenster und Aufruf Plot funktioniert wirklich gut. Zum Beispiel habe ich meine Daten und Optionen in Variablen auf der Seite gespeichert. Dann habe ich Setup diese auf $ (document) .ready():

$(window).resize(function() {$.plot($('#graph_div'), data, opts);});

+1

Hier ist ein funktionierendes Beispiel von ihrer Website hinzufügen: http://people.iola.dk/olau/flot/examples/resize.html –

+0

Eigentlich mag ich wie du das gemacht hast. Es macht auch das Resize-Plugin überflüssig. Der einzige Nachteil, den ich bemerkt habe, ist ein leichtes Ruckeln beim Größenverändern, aber nichts Größeres. Vielen Dank! – AfromanJ

0

Ich scheine eine Lösung gefunden zu haben, obwohl ich nicht ganz sicher bin, warum es funktioniert. Ich benutze immer noch den Ansatz, das enthaltene <div> aus dem Dokument zu entfernen und zu lesen und den darin enthaltenen Graphen neu zu erstellen. Doch wo vorher hatte ich

window.onresize = redrawFunc; //redrawFunc removes and readds the containing div and replots 

getan, die immer in anfällig zu sein schienen, wie es schien eine unendliche Schleife in Abhängigkeit davon, zu sein, was die redrawFunc auf das Dokument hat.

Stattdessen versuchte ich jQuery resize mit

$(window).resize = redrawFunc; 

Bindung Bisher egal was andere Änderungen, die ich an das Dokument zu machen in der redrawFunc Ich habe nicht hatte ein Problem mit diesem Ansatz stecken in einer Schleife noch . Ich bin mir nicht sicher warum.

3

Ich fand nur eine Lösung für diese selbst. Ich habe meinen Anruf zu $.plot() eingewickelt, so dass die ursprüngliche Ursache für mein spezifisches Problem sein kann, aber flot weigerte sich, die Größe zu ändern, selbst wenn ich das jQuery resize-Ereignis verwendete. Hier ist mein Code ändern, der alles behoben:

$(window).resize(function() { 
    // erase the flot graph, allowing the div to shrink correctly 
    $('#graph_div').text(''); 

    // redraw the graph in the correctly sized div 
    $.plot($('#graph_div'), data, opts); 
}); 
6

Die neueste Version der flot API docs zumindest beschreibt ein Resize-Ereignis, das so funktioniert.

Resize()

Tells Flot der Zeichenfläche auf die Größe des Platzhalter zu ändern. Sie müssen setupGrid() und draw() danach ausführen, da Canvas-Größenänderung eine destruktive Operation ist. Dies wird intern vom resize-Plugin verwendet.

+0

'plot.resize(); plot.setupGrid(); plot.draw(); 'funktioniert für mich, wo plot:' var plot = $ .plot ($ ('# graph_div'), data, opts); ' –