D3 responsiv machen: viewBox vs resize ()?

8

Ich muss d3-Visualisierungen erstellen, die sowohl auf Tablets als auch auf Desktop-Displays und in einigen Fällen auf sehr großen 4k + hochauflösenden Kino-Displays gut funktionieren.

Ich versuche also herauszufinden, welcher Kompromiss zwischen SVGs Attribut 'viewBox' und 'preserveaspectratio' besteht, wenn eine Größenänderungsfunktion aufgerufen wurde, um bei Fenstergrößenänderungsereignissen erneut zu rendern und absolute Werte zu verwenden. Die meisten Beispiele, wie dieser Blogeintrag ( Ссылка ) schlage das Letztere vor, in dem ich so etwas tue:

%Vor%

Warum kann ich nicht einfach SVG viewBox verwenden, um meine SVG wie folgt zu skalieren:

%Vor%

Ich mache einfach alles unter der Annahme, dass meine Breite und Höhe 900x500px (oder was auch immer) ist, und nutze die Tatsache, dass SVG ein Vektorformat ist, das sich um alle frechen Details wie Textgrößen und Ränder . Ich bemühe mich zu sehen, warum so viele Leute, wenn sie Beispiele für responsive oder skalierbare Visualisierungen mit D3 geben, eine resize () -Funktion favorisieren, und ich bin sehr besorgt, dass ich etwas vermisse, wenn ich die viewBox-Route hinuntergehe.

Bearbeiten:

Also zusätzlich zu dem, was ich unten gesagt habe, ist ein Gedanke, dass ich mit einer ViewBox mit einem bestimmten Seitenverhältnis festhalte. Ich möchte vielleicht, dass die Höhe der Visualisierung fest bleibt, wie im Fall einer Linie oder eines Balkendiagramms, aber sie muss auf ihre Breite reagieren. Bei einem festen Seitenverhältnis ist dies nicht möglich, da Änderungen in der Breite Höhenänderungen erfordern. Dieser Fall erfordert eine Funktion resize (), die neu gerendert wird, um an das neue Seitenverhältnis anzupassen.

Obwohl eine ViewBox mit einem festen Seitenverhältnis wesentlich einfacher zu implementieren ist, gibt es viele häufige Fälle, die eine größere Kontrolle erfordern, was eine resize () -Funktion erfordert und die Community-Präferenz für die kompliziertere Lösung als erste erklärt und letzter Ausweg. Mein Anwendungsfall favorisiert wahrscheinlich die viewBox-Lösung, was etwas ungewöhnlich ist, wenn Ihre Anforderung reaktionsfähig ist.

    
Michael Rutter 03.03.2016, 13:07
quelle

1 Antwort

3

Ich würde die folgende Logik empfehlen:

  • Wenn Ihre Visualisierung in den kleinsten Bildschirmen verwendet werden kann, die Sie mit der viewBox-Technik unterstützen möchten, bleiben Sie dabei, ohne weiter nachsehen zu müssen (Glücklicherweise:))
  • Andernfalls: Beim Herunterskalieren der Visualisierungen treten möglicherweise folgende Probleme auf:
    • es gibt zu viele Details, die nicht in kleineren Bildschirmen unterschieden werden können
    • Die Texte sind zu klein und in den kleineren Bildschirmen nicht lesbar

Dann müssen Sie Javascript verwenden, um Ihre Visualisierung auf der Bildschirmgröße anzupassen. Dieser Blog-Artikel nimmt die Reaktionsfähigkeit von Visualisierungen ernst.

Oh, und vergiss nicht entprellen Sie Ihren Größenanpassungs-Ereignis-Listener .

    
Mehdi El Fadil 03.03.2016, 13:28
quelle

Tags und Links