teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

不要なコードを削除しました

2018/12/30 05:25

投稿

masayasasaki96
masayasasaki96

スコア19

title CHANGED
File without changes
body CHANGED
@@ -63,7 +63,6 @@
63
63
  let add_box = document.getElementById("add_box");
64
64
  let box_count = 0;
65
65
  add_box.addEventListener("click", () => {
66
- alert("aiueo");
67
66
  let div4box = document.createElement("div");
68
67
  div4box.insertAdjacentHTML("afterbegin", '<div id=box' + box_count + '><table><tr><td>hoge1</td></tr><tr><td>hoge2</td></tr></table></div>');
69
68
  let parent_div = document.getElementById("boxes");

4

コード等を追加しました

2018/12/30 05:25

投稿

masayasasaki96
masayasasaki96

スコア19

title CHANGED
File without changes
body CHANGED
@@ -7,5 +7,125 @@
7
7
  - 追加したボックスはユニークなidを持っていて、ドラッグで動かすことができる
8
8
  - 「-」ボタンを押すとボックスが削除される
9
9
 
10
+ #作成したコード
10
- これらようにすれば現できるのでょうか?
11
+ 現在、追加ボタン「+」ています。
12
+ ```HTML
13
+ <!DOCTYPE html>
14
+ <html lang="ja">
15
+ <head>
16
+ <meta charset="utf-8">
17
+ <title>box</title>
18
+ <link rel="stylesheet" href="bx.css">
19
+ </head>
20
+ <body>
21
+ ボックス追加:
22
+ <button id="add_box">+</button>
23
+
24
+ <div class="box" id="boxes">
25
+ <!-- ここを動的に作成したいです
26
+ <div id="box0">
27
+ <table>
28
+ <tr>
29
+ <td>
30
+ hoge1
31
+ </td>
32
+ </tr>
33
+ <tr>
34
+ <td>
35
+ hoge2
36
+ </td>
37
+ </tr>
38
+ </table>
39
+ </div>
40
+ -->
41
+
42
+ <!--
43
+ <div id="box1">
44
+ <table>
45
+ <tr>
46
+ <td>
47
+ hoge1
48
+ </td>
49
+ </tr>
50
+ <tr>
51
+ <td>
52
+ hoge2
53
+ </td>
54
+ </tr>
55
+ </table>
56
+ </div>
57
+ -->
58
+ </div>
59
+ ```
60
+
61
+ ```JavaScript
62
+ <script> /*** プラスボタンでボックスを追加 ***/
63
+ let add_box = document.getElementById("add_box");
64
+ let box_count = 0;
65
+ add_box.addEventListener("click", () => {
66
+ alert("aiueo");
67
+ let div4box = document.createElement("div");
68
+ div4box.insertAdjacentHTML("afterbegin", '<div id=box' + box_count + '><table><tr><td>hoge1</td></tr><tr><td>hoge2</td></tr></table></div>');
69
+ let parent_div = document.getElementById("boxes");
70
+ parent_div.appendChild(div4box);
71
+ box_count++;
72
+
73
+ /*** ボックス移動 ***/
74
+ (function(){
75
+ let drg_and_drp = document.getElementById("box0");
76
+ let drag_toggle;
77
+ let x, y;
78
+ alert(box_count);
79
+ drg_and_drp.addEventListener("mousedown", (msdwn_evnt) => {
80
+ drag_toggle = "on";
81
+ x = msdwn_evnt.clientX - drg_and_drp.offsetLeft;
82
+ y = msdwn_evnt.clientY - drg_and_drp.offsetTop;
83
+ }, false);
84
+
85
+ document.body.addEventListener("mouseup", (msup_evnt) => {
86
+ drag_toggle = "off";
87
+ }, false);
88
+
89
+ document.body.addEventListener("mousemove", (msmv_evnt) => {
90
+ if(drag_toggle == "on"){
91
+ /****** ここが機能しません ******/
92
+ drg_and_drp.style.left = msmv_evnt.clientX - x + "px";
93
+ drg_and_drp.style.top = msmv_evnt.clientY - y +"px";
94
+ }
95
+ }, false);
96
+ })();
97
+ }, false);
98
+ </script>
99
+
100
+ </body>
101
+ </html>
102
+ ```
103
+
104
+ ```CSS
105
+ .box table {
106
+ border-radius: 10px;
107
+ border: 3px solid deepskyblue;
108
+ border-spacing: 0; /* 無駄な余白を削除 */
109
+ text-align: center; /* 要素をテーブルの中央に寄せる */
110
+
111
+ cursor: grab;
112
+ position: absolute;
113
+ z-index: 1000;
114
+ }
115
+
116
+ .box table tr:first-child td {
117
+ padding: 0px 15px; /* 上下0px、左右15px */
118
+ border-bottom: 2px solid deepskyblue; /* ヨコ線はbottomだけ表示 */
119
+ }
120
+
121
+ .box table tr:last-child td {
122
+ padding: 5px 15px; /* 上下5px、左右15px */
123
+ border-bottom: none; /* テーブルの一番下の線を消す */
124
+ }
125
+ ```
126
+
127
+ #お尋ねしたいこと
128
+ 動的にボックスを追加でき表示までされるのですが、それをドラッグして移動させることができません。
129
+ JavaScriptの最後の関数の中で使用している.style.leftと.style.topの値は変わっているにも関わらず、実際に表示されているボックスの位置に変化がないのですが、どのようにすれば解決できるでしょうか?
130
+
11
131
  どうぞよろしくお願いいたしますm(_ _)m

3

回答が得られなかったため質問を修正しました

2018/12/30 05:09

投稿

masayasasaki96
masayasasaki96

スコア19

title CHANGED
@@ -1,1 +1,1 @@
1
- JavaScriptでドラッグ移動できる要素を動的に作成したいです
1
+ JavaScriptでドラッグ移動できる要素を動的に作成したい
body CHANGED
@@ -1,87 +1,11 @@
1
- #やりたいこと
1
+ #実現したいこと
2
- JavaScript(ネイティヴ)で、次の動作を実現したいです。
2
+ JavaScript(ネイティヴ)で、次の条件を満たす動作を実現したいです。
3
3
  - 初期画面
4
- ・ドラッグで移動可能なボックスが一つある状態
4
+ ・ドラッグで移動可能なボックス(テーブルなどの要素)が一つある状態
5
- ・ボックス追加用ボタン「+」が表示されている状態
5
+ ・ボックス追加用ボタン「+」、削除用ボタン「-」が表示されている状態
6
6
  - 「+」ボタンを押すとボックスが新しく作られ表示される
7
7
  - 追加したボックスはユニークなidを持っていて、ドラッグで動かすことができる
8
+ - 「-」ボタンを押すとボックスが削除される
8
9
 
9
- #ドラッグボックスを(一応)移動できるコード
10
+ これらはどのようにすれば実現できるのでしょうか?
10
- ```JavaScript
11
- <!DOCTYPE html>
12
- <html lang="ja">
13
- <head>
14
- <meta charset="utf-8">
15
- <title>drag-and-drop</title>
16
- </head>
17
- <body>
18
- <!-- ボックスを作成 -->
19
- <div class="drag_and_drop">
20
- <table>
21
- <tr>
22
- <td>hoge1</td>
23
- </tr>
24
- <tr>
25
- <td>hoge2</td>
26
- </tr>
27
- </table>
28
- </div>
29
-
30
- <style> /*** ボックスの見た目 ***/
31
- .drag_and_drop {
32
- cursor: move;
33
- position: absolute;
34
- }
35
-
36
- table {
37
- border: 3px solid deepskyblue;
38
- border-spacing: 0;
39
- text-align: center;
40
- }
41
-
42
- table tr:first-child td {
43
- padding: 3px 10px;
44
- border-bottom: 2px solid deepskyblue;
45
- }
46
-
47
- table tr:last-child td {
48
- padding: 3px 10px;
49
- }
50
- </style>
51
-
52
- <script> /*** ボックス移動 ***/
53
- let drg_and_drp = document.getElementsByClassName("drag_and_drop");
54
- let drag_toggle;
55
- let x, y;
56
-
57
- for(let i = 0; i < drg_and_drp.length; i++){
58
- drg_and_drp[i].addEventListener("mousedown", (msdwn_evnt) => {
59
- drag_toggle = "on";
60
- x = msdwn_evnt.clientX - drg_and_drp[i].offsetLeft;
61
- y = msdwn_evnt.clientY - drg_and_drp[i].offsetTop;
62
- }, false);
63
-
64
- document.body.addEventListener("mouseup", (msup_evnt) => {
65
- drag_toggle = "off";
66
- }, false);
67
-
68
- document.body.addEventListener("mousemove", (msmv_evnt) => {
69
- if(drag_toggle === "on"){
70
- drg_and_drp[i].style.left = msmv_evnt.clientX - x + "px";
71
- drg_and_drp[i].style.top = msmv_evnt.clientY - y + "px";
72
- }
73
- }, false);
74
- }
75
- </script>
76
- </body>
77
- </html>
78
- ```
79
-
80
- #お尋ねしたいこと
81
- **① 上に示したコードの最適化**
82
- 載せているコードには少しバグ(?)のようなものがあります。具体的には、たまにクリックしていないのにボックスがカーソルについていき、カーソルから離れにくいなどです。
83
- また、for文を使っているのはボックスを増やしていこうと考えたためですが、どのように実装すれば目的の動作になるのか分からなかったため現時点では意味ありません。。
84
-
85
- **② ドラッグして移動可能なボックスを追加できるプログラム(可能ならば削除機能も)を教えて頂きたいです。**
86
-
87
11
  どうぞよろしくお願いいたしますm(_ _)m

2

不要な部分を削除しました

2018/12/30 00:29

投稿

masayasasaki96
masayasasaki96

スコア19

title CHANGED
File without changes
body CHANGED
@@ -82,6 +82,6 @@
82
82
  載せているコードには少しバグ(?)のようなものがあります。具体的には、たまにクリックしていないのにボックスがカーソルについていき、カーソルから離れにくいなどです。
83
83
  また、for文を使っているのはボックスを増やしていこうと考えたためですが、どのように実装すれば目的の動作になるのか分からなかったため現時点では意味ありません。。
84
84
 
85
- **② 追加ボタンでドラッグして移動可能なボックスを追加できるプログラム(可能ならば削除機能も)を教えて頂きたいです。**
85
+ **② ドラッグして移動可能なボックスを追加できるプログラム(可能ならば削除機能も)を教えて頂きたいです。**
86
86
 
87
87
  どうぞよろしくお願いいたしますm(_ _)m

1

不要な部分を削除しました

2018/12/28 19:33

投稿

masayasasaki96
masayasasaki96

スコア19

title CHANGED
File without changes
body CHANGED
@@ -59,12 +59,10 @@
59
59
  drag_toggle = "on";
60
60
  x = msdwn_evnt.clientX - drg_and_drp[i].offsetLeft;
61
61
  y = msdwn_evnt.clientY - drg_and_drp[i].offsetTop;
62
- console.log("mouseDOWN");
63
62
  }, false);
64
63
 
65
64
  document.body.addEventListener("mouseup", (msup_evnt) => {
66
65
  drag_toggle = "off";
67
- console.log("mouseUP");
68
66
  }, false);
69
67
 
70
68
  document.body.addEventListener("mousemove", (msmv_evnt) => {