[解決済み】d3.jsでウィンドウサイズ変更時にsvgをリサイズする。
2022-04-15 21:52:26
質問
d3.jsで散布図を描いています。この質問の助けを借りて:
画面サイズ、現在のウェブページ、ブラウザウィンドウのサイズを取得する
私はこの答えを使っています。
var w = window,
d = document,
e = d.documentElement,
g = d.getElementsByTagName('body')[0],
x = w.innerWidth || e.clientWidth || g.clientWidth,
y = w.innerHeight|| e.clientHeight|| g.clientHeight;
それで、私のプロットをユーザーのウィンドウにこのようにフィットさせることができます。
var svg = d3.select("body").append("svg")
.attr("width", x)
.attr("height", y)
.append("g");
あとは、ユーザーがウィンドウをリサイズしたときに、プロットのサイズを変更できるようにしてほしいです。
PS : 私のコードでは、jQueryは使用していません。
解決方法は?
レスポンシブSVG」を探せば、SVGをレスポンシブにするのはとても簡単で、もうサイズについて心配する必要はありません。
以下はその方法です。
d3.select("div#chartId")
.append("div")
// Container class to make it responsive.
.classed("svg-container", true)
.append("svg")
// Responsive SVG needs these 2 attributes and no width and height attr.
.attr("preserveAspectRatio", "xMinYMin meet")
.attr("viewBox", "0 0 600 400")
// Class to make it responsive.
.classed("svg-content-responsive", true)
// Fill with a rectangle for visualization.
.append("rect")
.classed("rect", true)
.attr("width", 600)
.attr("height", 400);
.svg-container {
display: inline-block;
position: relative;
width: 100%;
padding-bottom: 100%; /* aspect ratio */
vertical-align: top;
overflow: hidden;
}
.svg-content-responsive {
display: inline-block;
position: absolute;
top: 10px;
left: 0;
}
svg .rect {
fill: gold;
stroke: steelblue;
stroke-width: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<div id="chartId"></div>
注 SVG画像に含まれるすべてのものは、ウィンドウの幅に合わせて拡大縮小されます。これには、ストロークの幅やフォントサイズ(CSSで設定されたものも含む)も含まれます。もし、これが望ましくない場合は、以下にもっと詳細な解決策を示します。
詳細はこちら/チュートリアル
http://thenewcode.com/744/Make-SVG-Responsive
http://soqr.fr/testsvg/embed-svg-liquid-layout-responsive-web-design.php
関連
-
JavaScriptの関数この指摘の問題を説明
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
vueのグローバルがscss(mixin)を導入。
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
[解決済み] URLを新しいタブで開く(新しいウィンドウではない)
-
[解決済み] 画面サイズ、現在のウェブページ、ブラウザウィンドウのサイズを取得する
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] JavaScriptで二重引用符と単一引用符はいつ使うべきですか?
-
[解決済み] JavaScript のウィンドウサイズ変更イベント
-
[解決済み] Reactの "after render "コード?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vueディレクティブv-bindの使用と注意点
-
Vueでルートネスティングを実装する例
-
Vueのフィルタの説明
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】React-Redux: アクションはプレーンオブジェクトでなければならない。非同期アクションにはカスタムミドルウェアを使用する
-
[解決済み】リクエストに失敗していないのに、「TypeError: failed to fetch」が表示される。
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
-
jq は html ページとデータを動的に分割する。
-
[解決済み] 画面サイズ、現在のウェブページ、ブラウザウィンドウのサイズを取得する
-
[解決済み】d3.jsのビジュアライゼーションレイアウトをレスポンシブにする最適な方法は?