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

質問編集履歴

1

修正しました

2019/09/29 03:12

投稿

543
543

スコア15

title CHANGED
File without changes
body CHANGED
@@ -6,4 +6,112 @@
6
6
 
7
7
  自身でやると画像そのものを点滅することしかできません.
8
8
 
9
- 解決方法お分かりの方いましたらよろしくお願いいたします.
9
+ 解決方法お分かりの方いましたらよろしくお願いいたします.
10
+ 下記の一部分のコードは2つ画像選択できるのですが,1つのみ移動させて重ねるものになっています.画像は透過したもので下の部分が見える形になっています.
11
+ アドバイスいただけましたらよろしくお願いいたします.
12
+
13
+ ```css
14
+
15
+ .drag-and-drop {
16
+ cursor: move;
17
+ position: absolute;
18
+ z-index: 1000;
19
+ }
20
+
21
+ .drag {
22
+ z-index: 1001;
23
+ }
24
+
25
+
26
+ ```
27
+ ```js
28
+ (function(){
29
+
30
+ //要素の取得
31
+ var elements = document.getElementsByClassName("drag-and-drop");
32
+
33
+ //要素内のクリックされた位置を取得するグローバル(のような)変数
34
+ var x;
35
+ var y;
36
+
37
+ //マウスが要素内で押されたとき、又はタッチされたとき発火
38
+ for(var i = 0; i < elements.length; i++) {
39
+ elements[i].addEventListener("mousedown", mdown, false);
40
+ elements[i].addEventListener("touchstart", mdown, false);
41
+ }
42
+
43
+ //マウスが押された際の関数
44
+ function mdown(e) {
45
+
46
+ //クラス名に .drag を追加
47
+ this.classList.add("drag");
48
+
49
+ //タッチデイベントとマウスのイベントの差異を吸収
50
+ if(e.type === "mousedown") {
51
+ var event = e;
52
+ } else {
53
+ var event = e.changedTouches[0];
54
+ }
55
+
56
+ //要素内の相対座標を取得
57
+ x = event.pageX - this.offsetLeft;
58
+ y = event.pageY - this.offsetTop;
59
+
60
+ //ムーブイベントにコールバック
61
+ document.body.addEventListener("mousemove", mmove, false);
62
+ document.body.addEventListener("touchmove", mmove, false);
63
+ }
64
+
65
+ //マウスカーソルが動いたときに発火
66
+ function mmove(e) {
67
+
68
+ //ドラッグしている要素を取得
69
+ var drag = document.getElementsByClassName("drag")[0];
70
+
71
+ //同様にマウスとタッチの差異を吸収
72
+ if(e.type === "mousemove") {
73
+ var event = e;
74
+ } else {
75
+ var event = e.changedTouches[0];
76
+ }
77
+
78
+ //フリックしたときに画面を動かさないようにデフォルト動作を抑制
79
+ e.preventDefault();
80
+
81
+ //マウスが動いた場所に要素を動かす
82
+ drag.style.top = event.pageY - y + "px";
83
+ drag.style.left = event.pageX - x + "px";
84
+
85
+ //マウスボタンが離されたとき、またはカーソルが外れたとき発火
86
+ drag.addEventListener("mouseup", mup, false);
87
+ document.body.addEventListener("mouseleave", mup, false);
88
+ drag.addEventListener("touchend", mup, false);
89
+ document.body.addEventListener("touchleave", mup, false);
90
+
91
+ }
92
+
93
+ //マウスボタンが上がったら発火
94
+ function mup(e) {
95
+ var drag = document.getElementsByClassName("drag")[0];
96
+
97
+ //ムーブベントハンドラの消去
98
+ document.body.removeEventListener("mousemove", mmove, false);
99
+ drag.removeEventListener("mouseup", mup, false);
100
+ document.body.removeEventListener("touchmove", mmove, false);
101
+ drag.removeEventListener("touchend", mup, false);
102
+
103
+ //クラス名 .drag も消す
104
+ drag.classList.remove("drag");
105
+ }
106
+
107
+ })()
108
+
109
+ ```
110
+
111
+ ```html
112
+ <div class="drag-and-drop1" id="input_img">
113
+
114
+ </div>
115
+ ```
116
+ 現状
117
+ [作成](https://codepen.io/yudance/pen/jONoqYj)