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

質問編集履歴

1

ソースコードを間違いました

2021/01/22 12:36

投稿

oasis
oasis

スコア2

title CHANGED
@@ -1,1 +1,1 @@
1
- javascript clone.node(true)で同じ要素を複製したい
1
+ javascript clone.node(true)で同じイベントを持つ要素を複製したい
body CHANGED
@@ -1,353 +1,32 @@
1
1
  ### 前提・実現したいこと
2
2
  javascriptで
3
- マウスドラックを用いた家具の配置2Dシミレーション(枠内を指定したフローリング)を実装したいと思っています
3
+ マウスドラックを用いた家具の配置2Dシミレーション(枠内を指定したフローリング)を
4
+ 実装したいと思っていますmousedown→mousemove→mousedownのイベントを使用
4
5
  ### 発生している問題・エラーメッセージ
6
+ クリックを押すと度に同じイベントを持つ家具がが出力されるようにしたくて
5
7
 
6
- 同じ家具をフローリングに出力する追加機能を持つボタンを作成している時に
7
-
8
-
9
- 既存の本棚に対して同じイベント処理(枠内のマウスドラック)を
10
- 追加した本棚をclone.Nodeも用いて出力することができましたが
11
- (2つまでの出力は成功)
12
-
13
-
14
- (3つ目を試みると)
15
- もう一度
16
- 追加ボタンを押すと本棚出力されるのですが
8
+ 一つ目の家具mouseupで外れるのですが
17
- イベント処理(枠内マウスドラック)が追加されず適用されずにドラックがきまん。
9
+ 一つ目のcloneを複製しmousedownしmousemove画像は動かるのですが
18
-
10
+ 肝心のmouseupで画像がマウスから離れません
19
-
20
-
21
11
  ```
22
12
  エラーメッセージ
23
13
  ```
24
-
14
+ 250行目のconsoleが出力できないので
15
+ 210行目付近でclone.mouseupイベントで問題が起こっているかも
25
16
  ### 該当のソースコード
26
17
 
27
18
  ```ここに言語名を入力
28
- javascript ライブラリを使用Jqueryは使用していません
19
+ javascript ライブラリを使用していません
20
+ Jqueryは使用していません
29
21
 
30
22
 
31
23
  ソースコード
32
-
33
- HTML
34
-
35
- <div class="menu-card-inner">
36
- <img class="menu-image" src="./images/0fb8a39d38f69ae68fa57ed1edf7b9ec.jpg" alt="家具1">
37
- <h3 class="menu-title">本棚<br>
38
- 4800円</h3>
39
- <button class ="btn" onclick="document.getElementById('contents1').style.visibility = 'visible';">クリック</button>
40
- <button class ="btn" onclick=cloneElement()>追加</button>
41
-                     //この追加機能を直したいです
42
-
43
- <button class ="btn" id="addbuton" onclick=remove()>削除</button>
44
-
45
- </div>
46
- </div>
47
- <div class="menu-card">
48
- <div class="menu-card-inner">
49
- <img class="menu-image" src="./images/trend_20150716131537.jpg" alt="家具1">
50
- <h3 class="menu-title">テレビ<br>
51
- 27000円</h3>
52
- <button class ="btn" onclick="document.getElementById('contents2').style.visibility = 'visible';">クリック</button>
53
- <button class ="btn" onclick="cloneElement1();stopclone()">追加</button>
54
-
55
- </div>
56
- </div>
57
-
58
- <div class="menu-card">
59
- <div class="menu-card-inner">
60
- <img class="menu-image" src="./images/1b71e2b924b8a56374648cb8efdc1958.jpg" alt="家具1">
61
- <h3 class="menu-title">机<br>
62
- 3000円
63
- </h3>
64
- <button class ="btn" onclick="document.getElementById('contents3').style.visibility = 'visible';">クリック</button>
65
- <button class ="btn" onclick=cloneElement2()>追加</button>
66
- </div>
67
- </div>
68
- <div class="menu-card">
69
- <div class="menu-card-inner">
70
- <img class="menu-image" src="./images/471429001.jpg" alt="レモネード">
71
- <h3 class="menu-title">食器棚<br>
72
- 8000円</h3>
73
- <button class ="btn" onclick="document.getElementById('contents4').style.visibility = 'visible';">クリック</button>
74
- <button class ="btn" onclick=cloneElement3()>追加</button>
75
- </div>
76
- </div>
77
-
78
-
79
- <div class="menu-card">
80
- <div class="menu-card-inner">
81
- <img class="menu-image" src="./images/mv_raffia-1.jpg" alt="カフェラテ">
82
- <h3 class="menu-title">ベット<br>
83
- 16000円</h3>
84
- <button class ="btn" onclick="document.getElementById('contents5').style.visibility = 'visible';">クリック</button>
85
- <button class ="btn" onclick=cloneElement4()>追加</button>
86
- </div>
87
- </div>
88
-
89
- //追加しました
90
- css
91
-
92
-
93
- .box2{
94
- background-color: rgb(206, 182, 106);
95
- float:right;
96
- width: 400px;
97
- height:470px;
98
- margin-right:250px ;
99
- background-image:url(../images/depositphotos_22441037-stock-photo-room-interior-vintage-with-white.jpg);
100
- }
101
-
102
- .menu-card {
103
- width: 33%;
104
- margin-top: 50px;
105
- }
106
- .menu-card-inner {
107
- padding: 10px 10px;
108
- background-color: #084d85;
109
- border-radius: 7px;
110
- box-shadow: 1px 1px 4px #d2d4d6;
111
- text-align: center;
112
- margin: 0 20px;
113
- width: 100px;
114
- height: 110px;
115
- margin-top: 10px;
116
-
117
- }
118
- .menu-image {
119
- width: 50px;
120
- height: 50px;
121
- margin-bottom: 8px;
122
- border-radius: 5px;
123
- }
124
- .menu-title {
125
- margin-bottom: 8px;
126
- font-size: 90%;
127
- }
128
- .menu-text {
129
- font-size: 14px;
130
- }
131
- .menu-card-wrapper {
132
- display: flex;
133
- flex-wrap: wrap;
134
- }
135
- h3{
136
- color: white;
137
- }
138
- h2{
139
-
140
- margin-top: px;
141
- text-align: center;
142
-
143
- }
144
-
145
- .button1{
146
- width: 50px;
147
- height: 20px;
148
- }
149
- .menu-nedan {
150
- margin-bottom: 8px;
151
- font-size: 90%;
152
- }
153
-
154
-
155
-
156
-
157
- javascript
158
-
159
- ライブラリは Yahoo! YUI Libraryを使用しています
160
- //回答を受けて再び編集しました
161
-   協力していただきたけると助かります
162
- //ロード
163
- YAHOO.util.Event.addListener(window, "load", function(){
164
-
165
-
166
-
167
- //家具の配列データ
168
- var kagu =['contents1','contents2','contents3','contents4','contents5'];
169
-                  //kagu[0]→ 本棚です
170
- var ddObj = new YAHOO.util.DD(kagu[0]);
171
-
172
- //X軸とY軸の指定
173
- //フローリング規定 X300 Y322
174
- ddObj.setXConstraint(0, 400, 10);
175
- ddObj.setYConstraint(0, 400, 10);
176
-
177
- var ddObj2 = new YAHOO.util.DD(kagu[1]);
178
-
179
- ddObj2.setXConstraint(0, 400, 10);
180
- ddObj2.setYConstraint(0, 400, 10);
181
-
182
-
183
- var ddObj3 = new YAHOO.util.DD(kagu[2]);
184
-
185
- ddObj3.setXConstraint(0, 400, 10);
186
- ddObj3.setYConstraint(0, 400, 10);
187
-
188
-
189
- var ddObj4 = new YAHOO.util.DD(kagu[3]);
190
-
191
- ddObj4.setXConstraint(0, 400, 10);
192
- ddObj4.setYConstraint(0, 400, 10);
193
-
194
- var ddObj5 = new YAHOO.util.DD(kagu[4]);
195
-
196
- ddObj5.setXConstraint(0, 400, 10);
197
- ddObj5.setYConstraint(0, 400, 10);
198
-
199
- // 家具の追加オブジャクト
200
- });
201
-
202
- //家具配列データ
203
- var kagu =['contents1','contents2','contents3','contents4','contents5'];
204
-
205
-
206
- //ボタン機能
207
-
208
- //スタートボタン
209
- function btn(){
210
-
211
- document.getElementById(kagu[0]).style.left = "0px";
212
- document.getElementById(kagu[1]).style.left = "80px";
213
- document.getElementById(kagu[2]).style.left = "160px";
214
- document.getElementById(kagu[3]).style.left = "240px";
215
- document.getElementById(kagu[4]).style.left = "320px";
216
- }
217
-
218
- //商品一覧から画面遷移ボタン
219
-
220
- function btn0(){
221
- document.getElementById(kagu[0]).style.left = 'visible';
222
- }
223
- function btn1(){
224
- document.getElementById(kagu[1]).style.left = "80px";
225
-
226
- }
227
-
228
- function btn2(){
229
- document.getElementById(kagu[2]).style.left = "160px";
230
-
231
- }
232
- function btn3(){
233
- document.getElementById(kagu[3]).style.left = "240px";
234
-
235
- }
236
- function btn4(){
237
- document.getElementById(kagu[4]).style.left = "320px";
238
-
239
- }
240
-
241
-
242
-
243
-
244
-
245
- // 追加 ☆ 質問する場所 エラーが起こっている場所 複製ボタン
246
-
247
- YAHOO.util.Event.addLister(window,"load",moveItems)
248
-
249
-
250
-
251
- function moveItems(){
252
-
253
- //クローンの配列化
254
-
255
-
256
- //なんかの処理→移動制限
257
- var ddObj = new YAHOO.util.DD("targetID");
258
-
259
- ddObj.setXConstraint(0, 322, 10);
260
- ddObj.setYConstraint(0, 300, 10);
261
-
262
-
263
-
264
- var ddObj7 = new YAHOO.util.DD("clone1");
265
-
266
- ddObj7.setXConstraint(0, 322, 10);
267
- ddObj7.setYConstraint(0, 300, 10);
268
-
269
- var ddObj8 = new YAHOO.util.DD("clone2");
270
-
271
- ddObj8.setXConstraint(0, 322, 10);
272
- ddObj8.setYConstraint(0, 300, 10);
273
-
274
-
275
- var ddObj9 = new YAHOO.util.DD("clone3");
276
-
277
- ddObj9.setXConstraint(0, 322, 10);
278
- ddObj9.setYConstraint(0, 300, 10);
279
-
280
-
281
-
282
- var ddObj10 = new YAHOO.util.DD("clone4");
283
-
284
- ddObj10.setXConstraint(0, 322, 10);
285
- ddObj10.setYConstraint(0, 300, 10);
286
-
287
-
288
-
289
- }
290
-
291
- // 家具の追加オブジャクト
292
-
293
- //回答者様に教えてもらったところ
294
- function cloneElement(furniture,kaguInd){
295
-             
296
-   /*furnitureは種類として
297
-       kaguIndは添え字として配列としてデータを格納するべきなのか?*/
298
-       
299
-
300
-
301
- //既存の家具をコピーする
302
-  
303
-              //kagu[0]のcloneを作りたい場合?は具体例があると助かります!
304
-          //kagu[0]は本棚です
305
-
306
-             /*kagu[0]は?となった場合は一番最初のコードに記載している
307
-              既存の本棚のデータです
308
-              既存の本棚のクローンを作る具体例をよろしくお願いします!*/
309
- const tpl = document.getElementById(kagu[kaguInd]);
310
- const clone = tpl.cloneNode(true);
311
-
312
- const targetIDPrefix = furniture + "clone";
313
- const suffix = document.querySelectorAll('[id^='+targetIDPrefix+']').length;
314
-
315
- // ~Clone0とか~Clone1みたいに後ろの数字が要素の数に応じて増えていく
24
+ https://codepen.io/wonderwall1996/pen/zYKXbMj 
316
- clone.id = targetIDPrefix + suffix;
317
-
318
-
319
-
320
- // idとdisplay設定
25
+ ソースコードが長いでcode.penに載せました
321
- clone.id = furniture+"clone";
322
- clone.class = "sample";
323
- clone.style.left ="0px";
324
- clone.style.display ="block";
325
-
326
- //クローンにマウスドラックイベントを追加する
327
- clone.addEventListener("drag",function(){
328
-
329
-
330
- moveItems(this.id);
331
- });
332
-
333
-
334
- //フローリングに出力
335
- base = document.getElementById('box1')
336
- base.appendChild(clone);
337
-
338
-
339
-
340
- }
341
-
342
- ```
343
-
344
26
  ### 試したこと
27
+ console.logで確認しながら
28
+ mouseupのイベントが外れていないところまでは特定できたのですがそこから先がとても苦戦しています
345
29
 
346
- for文を用いて繰り返しなのかと考え試行錯誤して
347
- クローンの複製のところcloenElementに
348
- for文をつけ足してみたのですが,うまく動きませんでした。
349
-
350
-
351
30
  ### 補足情報(FW/ツールのバージョンなど)
352
31
  投稿者はまだjavascriptを学習し始めた初心者ですので
353
32
  知識不足なので