質問編集履歴

1

修正しました

2019/09/29 03:12

投稿

543
543

スコア15

test CHANGED
File without changes
test CHANGED
@@ -15,3 +15,219 @@
15
15
 
16
16
 
17
17
  解決方法お分かりの方いましたらよろしくお願いいたします.
18
+
19
+ 下記の一部分のコードは2つ画像選択できるのですが,1つのみ移動させて重ねるものになっています.画像は透過したもので下の部分が見える形になっています.
20
+
21
+ アドバイスいただけましたらよろしくお願いいたします.
22
+
23
+
24
+
25
+ ```css
26
+
27
+
28
+
29
+ .drag-and-drop {
30
+
31
+ cursor: move;
32
+
33
+ position: absolute;
34
+
35
+ z-index: 1000;
36
+
37
+ }
38
+
39
+
40
+
41
+ .drag {
42
+
43
+ z-index: 1001;
44
+
45
+ }
46
+
47
+
48
+
49
+
50
+
51
+ ```
52
+
53
+ ```js
54
+
55
+ (function(){
56
+
57
+
58
+
59
+ //要素の取得
60
+
61
+ var elements = document.getElementsByClassName("drag-and-drop");
62
+
63
+
64
+
65
+ //要素内のクリックされた位置を取得するグローバル(のような)変数
66
+
67
+ var x;
68
+
69
+ var y;
70
+
71
+
72
+
73
+ //マウスが要素内で押されたとき、又はタッチされたとき発火
74
+
75
+ for(var i = 0; i < elements.length; i++) {
76
+
77
+ elements[i].addEventListener("mousedown", mdown, false);
78
+
79
+ elements[i].addEventListener("touchstart", mdown, false);
80
+
81
+ }
82
+
83
+
84
+
85
+ //マウスが押された際の関数
86
+
87
+ function mdown(e) {
88
+
89
+
90
+
91
+ //クラス名に .drag を追加
92
+
93
+ this.classList.add("drag");
94
+
95
+
96
+
97
+ //タッチデイベントとマウスのイベントの差異を吸収
98
+
99
+ if(e.type === "mousedown") {
100
+
101
+ var event = e;
102
+
103
+ } else {
104
+
105
+ var event = e.changedTouches[0];
106
+
107
+ }
108
+
109
+
110
+
111
+ //要素内の相対座標を取得
112
+
113
+ x = event.pageX - this.offsetLeft;
114
+
115
+ y = event.pageY - this.offsetTop;
116
+
117
+
118
+
119
+ //ムーブイベントにコールバック
120
+
121
+ document.body.addEventListener("mousemove", mmove, false);
122
+
123
+ document.body.addEventListener("touchmove", mmove, false);
124
+
125
+ }
126
+
127
+
128
+
129
+ //マウスカーソルが動いたときに発火
130
+
131
+ function mmove(e) {
132
+
133
+
134
+
135
+ //ドラッグしている要素を取得
136
+
137
+ var drag = document.getElementsByClassName("drag")[0];
138
+
139
+
140
+
141
+ //同様にマウスとタッチの差異を吸収
142
+
143
+ if(e.type === "mousemove") {
144
+
145
+ var event = e;
146
+
147
+ } else {
148
+
149
+ var event = e.changedTouches[0];
150
+
151
+ }
152
+
153
+
154
+
155
+ //フリックしたときに画面を動かさないようにデフォルト動作を抑制
156
+
157
+ e.preventDefault();
158
+
159
+
160
+
161
+ //マウスが動いた場所に要素を動かす
162
+
163
+ drag.style.top = event.pageY - y + "px";
164
+
165
+ drag.style.left = event.pageX - x + "px";
166
+
167
+
168
+
169
+ //マウスボタンが離されたとき、またはカーソルが外れたとき発火
170
+
171
+ drag.addEventListener("mouseup", mup, false);
172
+
173
+ document.body.addEventListener("mouseleave", mup, false);
174
+
175
+ drag.addEventListener("touchend", mup, false);
176
+
177
+ document.body.addEventListener("touchleave", mup, false);
178
+
179
+
180
+
181
+ }
182
+
183
+
184
+
185
+ //マウスボタンが上がったら発火
186
+
187
+ function mup(e) {
188
+
189
+ var drag = document.getElementsByClassName("drag")[0];
190
+
191
+
192
+
193
+ //ムーブベントハンドラの消去
194
+
195
+ document.body.removeEventListener("mousemove", mmove, false);
196
+
197
+ drag.removeEventListener("mouseup", mup, false);
198
+
199
+ document.body.removeEventListener("touchmove", mmove, false);
200
+
201
+ drag.removeEventListener("touchend", mup, false);
202
+
203
+
204
+
205
+ //クラス名 .drag も消す
206
+
207
+ drag.classList.remove("drag");
208
+
209
+ }
210
+
211
+
212
+
213
+ })()
214
+
215
+
216
+
217
+ ```
218
+
219
+
220
+
221
+ ```html
222
+
223
+ <div class="drag-and-drop1" id="input_img">
224
+
225
+
226
+
227
+ </div>
228
+
229
+ ```
230
+
231
+ 現状
232
+
233
+ [作成](https://codepen.io/yudance/pen/jONoqYj)