質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
SVG

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

Q&A

解決済

1回答

1540閲覧

SVGへ動的に画像を追加し、ドラッグ&ドロップで画像を移動させる

match12

総合スコア21

SVG

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

0グッド

0クリップ

投稿2020/09/28 13:32

編集2020/09/28 14:10

現在、SVGの勉強をしており、その中でsvgファイルへ動的に画像を追加し、
その画像をドラッグ&ドロップで動かせる様にしたいと考えています。

現在のソースとしては以下の通りです。

  • html

html

1 2<!DOCTYPE html> 3<html lang="ja"> 4 <head> 5 <meta charset="utf-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="viewport" content="width=device-width, initial-scale=1"> 8 <meta name="description" content=""> 9 <meta name="author" content=""> 10 <script src="//code.jquery.com/jquery-1.10.2.js"></script> 11 <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script> 12 13 <script src="/js/svg.min.js"></script> 14 <script src="/js/svg.draggable.min.js"></script> 15 </head> 16 17 <body> 18 19<object id="test" type="image/svg+xml" data="test.svg"></object> 20<button name="addBtn">追加</button> 21 </body> 22</html> 23
  • svg

svg

1<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1128.04 1272.27"><g class="cls-2"><g id="base"><image width="800" height="600" xlink:href="test.png"/></g></g></svg>
  • js

javascript

1$(function() { 2 3 $('[name="addBtn"]').on('click', function(){ 4 let svg_doc = document.getElementById('test_obj').contentDocument; 5 let src = 'test2.png'; 6 7 var image = document.createElementNS("http://www.w3.org/2000/svg", "image"); 8 image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', src); 9 image.setAttributeNS(null, 'id', 'test'); 10 image.setAttributeNS(null, 'width', 64); 11 image.setAttributeNS(null, 'height', 64); 12 svg_doc.appendChild(image); 13 14 $(image).ready(function() { 15 $(image).draggable(); 16 }); 17 }); 18 19});

問題点

document.getElementById('test_obj').contentDocument;

これがnullとなってしまいます。
document.getElementById('test_obj')自体でobject自体は取れているのですが
中身が取れていないので読み込みタイミングなどが原因なのかなとは思うのですが
どの様に対応すればいいのかがわかりません。

svg、javascriptへの知識が浅いため大変稚拙な説明となってしまっているかもしれませんが
ご有識者の方、お知恵を貸していただけたらと思います。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

document.getElementById('test_obj')自体でobject自体は取れているのですが

見た感じtest_objというidが定義された要素は見当たりません

投稿2020/09/28 14:00

yambejp

総合スコア116746

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

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

yambejp

2020/09/28 14:03

SVGに追加する要素はdocument.createElementNSで作る必要があります document.createElementNS('http://www.w3.org/2000/svg', "image")
match12

2020/09/28 14:11

ありがとうございます。 追加する要素の部分を変更しました。 ただ、追加する親側がnullになってしまってやはり追加することができません。 親の指定の仕方が悪いのでしょうか?
yambejp

2020/09/29 00:09

アペンドするならsvg自身にでしょう document.querySelector('svg').appendChild(image);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問