🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2430閲覧

D3.jsを使用して、SVGで作成した図をズーム・パンできるようにしたい

tekumak

総合スコア25

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/12/12 09:16

編集2019/12/12 09:21

https://wizardace.com/d3-zoom/

こちらのページを参考にして、htmlに記述したSVGで作成した図を、
モバイル端末のピンチ操作でズーム/パンしたいと思っているのですが、うまくいきません。

js

1 var width = 800; 2 var height = 600; 3 4 var svg = d3.select("svg_box"); 5 6 var dataset = []; 7 for(var i = 0; i < 300; i++) { 8 var r = 0.5 * d3.min([height, width]) * Math.random(); 9 var t = 2 * Math.PI * Math.random(); 10 dataset.push({ 11 "x": width / 2 + r * Math.cos(t), 12 "y": height / 2 + r * Math.sin(t) 13 }); 14 } 15 16 // 軸の設定 17 var x = d3.scaleLinear().domain([0, width]).range([0, width]); 18 var y = d3.scaleLinear().domain([0, height]).range([0, height]); 19 20 var xAxis = d3.axisBottom(x) 21 .ticks(width / height * 10) // 22 .tickSize(height) 23 .tickPadding(8 - height); 24 25 var yAxis = d3.axisRight(y) 26 .ticks(10) 27 .tickSize(width) 28 .tickPadding(8 - width); 29 30 var gX = svg.append("g").call(xAxis); 31 var gY = svg.append("g").call(yAxis); 32 33 var zoom = d3.zoom() 34 .scaleExtent([1, 40]) 35 .translateExtent([ 36 [-100, -100], 37 [width + 90, height + 100] 38 ]) 39 .on("zoom", zoomed); 40 41 svg.call(zoom); 42 43 function zoomed() { 44 gX.call(xAxis.scale(d3.event.transform.rescaleX(x))); 45 gY.call(yAxis.scale(d3.event.transform.rescaleY(y))); 46 }

html

1<div id="svg_box"> 2<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 800 600" id="svg_item"> 3SVGの記述(省略) 4</svg> 5</div>

D3.js以外にも方法があればご教示いただけますと幸いです。

お知恵をお借りしたく思います。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

D3.jsを使用せず、svg-pan-zoomを使用することで解決しました。
ありがとうございました。

投稿2020/01/22 04:19

tekumak

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問