svg タグ: JavaScript: ドラッグ操作
概略
svg 図形をマウスなどのドラッグ操作で移動させる話です。 ドラッグ操作で svg 図形を移動する方法はいくつかあります。 用途に応じて適した方法を使い分けます。
svg 図形が HTML 内にある要素か、外部ファイルか?
- svg が img 要素でリンクされた外部の画像ファイル。
この場合は img 要素をドラッグ操作する話になります。 - svg が HTML の中にある svg 要素。
ドローソフト風の操作などを行う Web アプリケーションでは svg 図形を 外部の画像ファイルではなく、 HTML 内の要素として格納しています。 JavaScript や CSS で細かい操作を行う話はこちらになります。
どの座標を変更するか?
- div などの親要素に対して絶対座標 (CSS の position: absolute;)
で配置した svg 要素や img 要素の座標を変更することで移動する。
こちらは svg 画像全体を動かす話になります。svg 内の細かい操作には適していません。
CSS position: absolute; - svg 要素内の画像部品を svg に対する絶対座標や transform で移動する。
svg 全体ではなくて svg 要素内の特定の画像部品を動かす話などはこちらになります。 CSS の transform や absolute とは異なる話になります。
svg タグ: JavaScript: transform で図形を操作する
このページでは主に 1. の話を紹介しています。
どのイベントで処理するか?
- HTML の draggable 属性 を使う方法。
draggable 属性でドラッグ操作する - マウスイベント (MouseEvent) を使う方法。
JavaScript: マウスイベントの処理
draggable 属性の方が JavaScript の処理が単純になりますが、 細かい調整はできません。draggable 属性は大雑把な操作に適しています。 MouseEvent では細かい調整もできますが JavaScript のコードも多くなり、 処理も重いのが欠点です。
draggable 属性のサンプル (2024/01)
TestJS_draggable_svg01.html
SVG のグリッド画像をドラッグ移動する。こちらは HTML の draggable 属性で処理するサンプルです。img 要素でリンクされた外部の svg ファイルの画像を移動します。
SVG のグリッド画像をドラッグ移動する。こちらは HTML の draggable 属性で処理するサンプルです。img 要素でリンクされた外部の svg ファイルの画像を移動します。
- TestJS_draggable_svg02.html
こちらは HTML 内にある svg 要素の画像をドラッグ操作で移動します。 svg 要素には offsetTop, offsetLeft がないので上の img のような処理を svg に対して直接行えません。 ということで svg を div で囲って div 要素をドラッグ移動します。
上の 2つのサンプルの違いは?
- 1) グリッドの svg 画像が img
要素でリンクされた外部画像ファイルの場合は、
例えばグリッドの縦横の個数を変えるなどの細かい操作はできません。
- 2) HTML 内に svg 要素を置いてある場合は JavaScript を使って svg 内の要素を削除したり追加したりするといった細かい操作もできます。 また、svg 内の要素を CSS で装飾するのも簡単に行えます。
MouseEvent のサンプル
TestJS_mouse_svg_drag01.htmlSVG のグリッド画像をマウス操作でドラッグ移動するサンプル。 こちらは MouseEvent で svg を格納した div 要素の座標を更新するサンプルです。