質問編集履歴

1

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

2021/01/22 12:36

投稿

oasis
oasis

スコア2

test CHANGED
@@ -1 +1 @@
1
- javascript clone.node(true)で同じ要素を複製したい
1
+ javascript clone.node(true)で同じイベントを持つ要素を複製したい
test CHANGED
@@ -2,41 +2,21 @@
2
2
 
3
3
  javascriptで
4
4
 
5
- マウスドラックを用いた家具の配置2Dシミレーション(枠内を指定したフローリング)を実装したいと思っています
5
+ マウスドラックを用いた家具の配置2Dシミレーション(枠内を指定したフローリング)を
6
+
7
+ 実装したいと思っていますmousedown→mousemove→mousedownのイベントを使用
6
8
 
7
9
  ### 発生している問題・エラーメッセージ
8
10
 
9
-
10
-
11
- 同じ家具をフローリングに出力追加機能を持つボタンを作成している時に
11
+ クリックを押すと度に同じイベントを持つ家具がが出力されようにたく
12
12
 
13
13
 
14
14
 
15
+ 一つ目の家具はmouseupで外れるのですが
15
16
 
17
+ 一つ目のcloneを複製しmousedownしmousemoveで画像は動かせるのですが
16
18
 
17
- 既存本棚に対して同じイベント処理(枠内のマウスドラック)を
19
+ 肝心mouseupで画像がマウスから離れません
18
-
19
- 追加した本棚をclone.Nodeも用いて出力することができましたが
20
-
21
- (2つまでの出力は成功)
22
-
23
-
24
-
25
-
26
-
27
- (3つ目を試みると)
28
-
29
- もう一度
30
-
31
- 追加ボタンを押すと本棚は出力されるのですが、
32
-
33
- イベント処理(枠内マウスドラック)が追加されず適用されずにドラックができません。
34
-
35
-
36
-
37
-
38
-
39
-
40
20
 
41
21
  ```
42
22
 
@@ -44,7 +24,9 @@
44
24
 
45
25
  ```
46
26
 
27
+ 250行目のconsoleが出力できないので
47
28
 
29
+ 210行目付近でclone.mouseupイベントで問題が起こっているかも
48
30
 
49
31
  ### 該当のソースコード
50
32
 
@@ -52,7 +34,9 @@
52
34
 
53
35
  ```ここに言語名を入力
54
36
 
55
- javascript ライブラリを使用Jqueryは使用していません
37
+ javascript ライブラリを使用していません
38
+
39
+ Jqueryは使用していません
56
40
 
57
41
 
58
42
 
@@ -60,641 +44,15 @@
60
44
 
61
45
  ソースコード
62
46
 
47
+ https://codepen.io/wonderwall1996/pen/zYKXbMj 
63
48
 
64
-
65
- HTML
66
-
67
-
68
-
69
- <div class="menu-card-inner">
70
-
71
- <img class="menu-image" src="./images/0fb8a39d38f69ae68fa57ed1edf7b9ec.jpg" alt="家具1">
72
-
73
- <h3 class="menu-title">本棚<br>
74
-
75
- 4800円</h3>
76
-
77
- <button class ="btn" onclick="document.getElementById('contents1').style.visibility = 'visible';">クリック</button>
78
-
79
- <button class ="btn" onclick=cloneElement()>追加</button>
80
-
81
-                     //この追加機能を直したいです
82
-
83
-
84
-
85
- <button class ="btn" id="addbuton" onclick=remove()>削除</button>
86
-
87
-
88
-
89
- </div>
90
-
91
- </div>
92
-
93
- <div class="menu-card">
94
-
95
- <div class="menu-card-inner">
96
-
97
- <img class="menu-image" src="./images/trend_20150716131537.jpg" alt="家具1">
98
-
99
- <h3 class="menu-title">テレビ<br>
100
-
101
- 27000円</h3>
102
-
103
- <button class ="btn" onclick="document.getElementById('contents2').style.visibility = 'visible';">クリック</button>
104
-
105
- <button class ="btn" onclick="cloneElement1();stopclone()">追加</button>
106
-
107
-
108
-
109
- </div>
110
-
111
- </div>
112
-
113
-
114
-
115
- <div class="menu-card">
116
-
117
- <div class="menu-card-inner">
118
-
119
- <img class="menu-image" src="./images/1b71e2b924b8a56374648cb8efdc1958.jpg" alt="家具1">
120
-
121
- <h3 class="menu-title">机<br>
122
-
123
- 3000円
124
-
125
- </h3>
126
-
127
- <button class ="btn" onclick="document.getElementById('contents3').style.visibility = 'visible';">クリック</button>
128
-
129
- <button class ="btn" onclick=cloneElement2()>追加</button>
130
-
131
- </div>
132
-
133
- </div>
134
-
135
- <div class="menu-card">
136
-
137
- <div class="menu-card-inner">
138
-
139
- <img class="menu-image" src="./images/471429001.jpg" alt="レモネード">
140
-
141
- <h3 class="menu-title">食器棚<br>
142
-
143
- 8000円</h3>
144
-
145
- <button class ="btn" onclick="document.getElementById('contents4').style.visibility = 'visible';">クリック</button>
146
-
147
- <button class ="btn" onclick=cloneElement3()>追加</button>
148
-
149
- </div>
150
-
151
- </div>
152
-
153
-
154
-
155
-
156
-
157
- <div class="menu-card">
158
-
159
- <div class="menu-card-inner">
160
-
161
- <img class="menu-image" src="./images/mv_raffia-1.jpg" alt="カフェラテ">
162
-
163
- <h3 class="menu-title">ベット<br>
164
-
165
- 16000円</h3>
166
-
167
- <button class ="btn" onclick="document.getElementById('contents5').style.visibility = 'visible';">クリック</button>
168
-
169
- <button class ="btn" onclick=cloneElement4()>追加</button>
170
-
171
- </div>
172
-
173
- </div>
174
-
175
-
176
-
177
- //追加しました
178
-
179
- css
180
-
181
-
182
-
183
-
184
-
185
- .box2{
186
-
187
- background-color: rgb(206, 182, 106);
188
-
189
- float:right;
190
-
191
- width: 400px;
192
-
193
- height:470px;
194
-
195
- margin-right:250px ;
196
-
197
- background-image:url(../images/depositphotos_22441037-stock-photo-room-interior-vintage-with-white.jpg);
198
-
199
- }
200
-
201
-
202
-
203
- .menu-card {
204
-
205
- width: 33%;
206
-
207
- margin-top: 50px;
208
-
209
- }
210
-
211
- .menu-card-inner {
212
-
213
- padding: 10px 10px;
214
-
215
- background-color: #084d85;
216
-
217
- border-radius: 7px;
218
-
219
- box-shadow: 1px 1px 4px #d2d4d6;
220
-
221
- text-align: center;
222
-
223
- margin: 0 20px;
224
-
225
- width: 100px;
226
-
227
- height: 110px;
228
-
229
- margin-top: 10px;
230
-
231
-
232
-
233
- }
234
-
235
- .menu-image {
236
-
237
- width: 50px;
238
-
239
- height: 50px;
240
-
241
- margin-bottom: 8px;
242
-
243
- border-radius: 5px;
244
-
245
- }
246
-
247
- .menu-title {
248
-
249
- margin-bottom: 8px;
250
-
251
- font-size: 90%;
252
-
253
- }
254
-
255
- .menu-text {
256
-
257
- font-size: 14px;
258
-
259
- }
260
-
261
- .menu-card-wrapper {
262
-
263
- display: flex;
264
-
265
- flex-wrap: wrap;
266
-
267
- }
268
-
269
- h3{
270
-
271
- color: white;
272
-
273
- }
274
-
275
- h2{
276
-
277
-
278
-
279
- margin-top: px;
280
-
281
- text-align: center;
282
-
283
-
284
-
285
- }
286
-
287
-
288
-
289
- .button1{
290
-
291
- width: 50px;
292
-
293
- height: 20px;
294
-
295
- }
296
-
297
- .menu-nedan {
298
-
299
- margin-bottom: 8px;
300
-
301
- font-size: 90%;
302
-
303
- }
304
-
305
-
306
-
307
-
308
-
309
-
310
-
311
-
312
-
313
- javascript
314
-
315
-
316
-
317
- ライブラリは Yahoo! YUI Libraryを使用しています
318
-
319
- //回答を受けて再び編集しました
49
+ ソースコードが長いのでcode.penに載せました
320
-
321
-   協力していただきたけると助かります
322
-
323
- //ロード
324
-
325
- YAHOO.util.Event.addListener(window, "load", function(){
326
-
327
-
328
-
329
-
330
-
331
-
332
-
333
- //家具の配列データ
334
-
335
- var kagu =['contents1','contents2','contents3','contents4','contents5'];
336
-
337
-                  //kagu[0]→ 本棚です
338
-
339
- var ddObj = new YAHOO.util.DD(kagu[0]);
340
-
341
-
342
-
343
- //X軸とY軸の指定
344
-
345
- //フローリング規定 X300 Y322
346
-
347
- ddObj.setXConstraint(0, 400, 10);
348
-
349
- ddObj.setYConstraint(0, 400, 10);
350
-
351
-
352
-
353
- var ddObj2 = new YAHOO.util.DD(kagu[1]);
354
-
355
-
356
-
357
- ddObj2.setXConstraint(0, 400, 10);
358
-
359
- ddObj2.setYConstraint(0, 400, 10);
360
-
361
-
362
-
363
-
364
-
365
- var ddObj3 = new YAHOO.util.DD(kagu[2]);
366
-
367
-
368
-
369
- ddObj3.setXConstraint(0, 400, 10);
370
-
371
- ddObj3.setYConstraint(0, 400, 10);
372
-
373
-
374
-
375
-
376
-
377
- var ddObj4 = new YAHOO.util.DD(kagu[3]);
378
-
379
-
380
-
381
- ddObj4.setXConstraint(0, 400, 10);
382
-
383
- ddObj4.setYConstraint(0, 400, 10);
384
-
385
-
386
-
387
- var ddObj5 = new YAHOO.util.DD(kagu[4]);
388
-
389
-
390
-
391
- ddObj5.setXConstraint(0, 400, 10);
392
-
393
- ddObj5.setYConstraint(0, 400, 10);
394
-
395
-
396
-
397
- // 家具の追加オブジャクト
398
-
399
- });
400
-
401
-
402
-
403
- //家具配列データ
404
-
405
- var kagu =['contents1','contents2','contents3','contents4','contents5'];
406
-
407
-
408
-
409
-
410
-
411
- //ボタン機能
412
-
413
-
414
-
415
- //スタートボタン
416
-
417
- function btn(){
418
-
419
-
420
-
421
- document.getElementById(kagu[0]).style.left = "0px";
422
-
423
- document.getElementById(kagu[1]).style.left = "80px";
424
-
425
- document.getElementById(kagu[2]).style.left = "160px";
426
-
427
- document.getElementById(kagu[3]).style.left = "240px";
428
-
429
- document.getElementById(kagu[4]).style.left = "320px";
430
-
431
- }
432
-
433
-
434
-
435
- //商品一覧から画面遷移ボタン
436
-
437
-
438
-
439
- function btn0(){
440
-
441
- document.getElementById(kagu[0]).style.left = 'visible';
442
-
443
- }
444
-
445
- function btn1(){
446
-
447
- document.getElementById(kagu[1]).style.left = "80px";
448
-
449
-
450
-
451
- }
452
-
453
-
454
-
455
- function btn2(){
456
-
457
- document.getElementById(kagu[2]).style.left = "160px";
458
-
459
-
460
-
461
- }
462
-
463
- function btn3(){
464
-
465
- document.getElementById(kagu[3]).style.left = "240px";
466
-
467
-
468
-
469
- }
470
-
471
- function btn4(){
472
-
473
- document.getElementById(kagu[4]).style.left = "320px";
474
-
475
-
476
-
477
- }
478
-
479
-
480
-
481
-
482
-
483
-
484
-
485
-
486
-
487
-
488
-
489
- // 追加 ☆ 質問する場所 エラーが起こっている場所 複製ボタン
490
-
491
-
492
-
493
- YAHOO.util.Event.addLister(window,"load",moveItems)
494
-
495
-
496
-
497
-
498
-
499
-
500
-
501
- function moveItems(){
502
-
503
-
504
-
505
- //クローンの配列化
506
-
507
-
508
-
509
-
510
-
511
- //なんかの処理→移動制限
512
-
513
- var ddObj = new YAHOO.util.DD("targetID");
514
-
515
-
516
-
517
- ddObj.setXConstraint(0, 322, 10);
518
-
519
- ddObj.setYConstraint(0, 300, 10);
520
-
521
-
522
-
523
-
524
-
525
-
526
-
527
- var ddObj7 = new YAHOO.util.DD("clone1");
528
-
529
-
530
-
531
- ddObj7.setXConstraint(0, 322, 10);
532
-
533
- ddObj7.setYConstraint(0, 300, 10);
534
-
535
-
536
-
537
- var ddObj8 = new YAHOO.util.DD("clone2");
538
-
539
-
540
-
541
- ddObj8.setXConstraint(0, 322, 10);
542
-
543
- ddObj8.setYConstraint(0, 300, 10);
544
-
545
-
546
-
547
-
548
-
549
- var ddObj9 = new YAHOO.util.DD("clone3");
550
-
551
-
552
-
553
- ddObj9.setXConstraint(0, 322, 10);
554
-
555
- ddObj9.setYConstraint(0, 300, 10);
556
-
557
-
558
-
559
-
560
-
561
-
562
-
563
- var ddObj10 = new YAHOO.util.DD("clone4");
564
-
565
-
566
-
567
- ddObj10.setXConstraint(0, 322, 10);
568
-
569
- ddObj10.setYConstraint(0, 300, 10);
570
-
571
-
572
-
573
-
574
-
575
-
576
-
577
- }
578
-
579
-
580
-
581
- // 家具の追加オブジャクト
582
-
583
-
584
-
585
- //回答者様に教えてもらったところ
586
-
587
- function cloneElement(furniture,kaguInd){
588
-
589
-             
590
-
591
-   /*furnitureは種類として
592
-
593
-       kaguIndは添え字として配列としてデータを格納するべきなのか?*/
594
-
595
-       
596
-
597
-
598
-
599
-
600
-
601
- //既存の家具をコピーする
602
-
603
-  
604
-
605
-              //kagu[0]のcloneを作りたい場合?は具体例があると助かります!
606
-
607
-          //kagu[0]は本棚です
608
-
609
-
610
-
611
-             /*kagu[0]は?となった場合は一番最初のコードに記載している
612
-
613
-              既存の本棚のデータです
614
-
615
-              既存の本棚のクローンを作る具体例をよろしくお願いします!*/
616
-
617
- const tpl = document.getElementById(kagu[kaguInd]);
618
-
619
- const clone = tpl.cloneNode(true);
620
-
621
-
622
-
623
- const targetIDPrefix = furniture + "clone";
624
-
625
- const suffix = document.querySelectorAll('[id^='+targetIDPrefix+']').length;
626
-
627
-
628
-
629
- // ~Clone0とか~Clone1みたいに後ろの数字が要素の数に応じて増えていく
630
-
631
- clone.id = targetIDPrefix + suffix;
632
-
633
-
634
-
635
-
636
-
637
-
638
-
639
- // idとdisplayの設定
640
-
641
- clone.id = furniture+"clone";
642
-
643
- clone.class = "sample";
644
-
645
- clone.style.left ="0px";
646
-
647
- clone.style.display ="block";
648
-
649
-
650
-
651
- //クローンにマウスドラックイベントを追加する
652
-
653
- clone.addEventListener("drag",function(){
654
-
655
-
656
-
657
-
658
-
659
- moveItems(this.id);
660
-
661
- });
662
-
663
-
664
-
665
-
666
-
667
- //フローリングに出力
668
-
669
- base = document.getElementById('box1')
670
-
671
- base.appendChild(clone);
672
-
673
-
674
-
675
-
676
-
677
-
678
-
679
- }
680
-
681
-
682
-
683
- ```
684
-
685
-
686
50
 
687
51
  ### 試したこと
688
52
 
53
+ console.logで確認しながら
689
54
 
690
-
691
- for文を用いて繰り返しなのかと考え試行錯誤して
692
-
693
- クローンの複製のところcloenElementに
694
-
695
- for文をつけ足したのですが,うく動きませんでした。
55
+ mouseupのイベントが外れいないところまでは特定できたのですがそこから先がとても苦戦してい
696
-
697
-
698
56
 
699
57
 
700
58