実現したいこと
Javascriptを使ったドラッグ&ドロップで、元のリストは全て残したままでドロップ先にはコピーされたアイテムを追加したい。
[アイテムA] [アイテムB] [アイテムC]
とリストがあって、そのうちアイテムBをドラッグし&ドロップした際に
ドロップ元には
[アイテムA] [アイテムB] [アイテムC]
が残ったまま、ドロップ先に
[アイテムB]
が表示されているようにしたい
発生している問題・分からないこと
WEBでドラッグ&ドロップを開設してくれているサイトを参考にスクリプトを記述したが、
ドロップ元から [アイテムB] が移動する形にしかならない。
23行目にある「dropEffect = 'copy'」
とすればコピーされると思っていたのですが、他に何か必要なのでしょうか?
該当のソースコード
JavaScropt
1document.addEventListener('DOMContentLoaded', function () { 2 const dragItems = document.querySelectorAll('.drag-item'); 3 const dragContainer = document.querySelector('.drag-container'); 4 const dropArea = document.querySelector('.q110drop_area'); 5 6 let offsetX, offsetY, draggedItem; 7 8 dragItems.forEach(dragItem => { 9 dragItem.addEventListener('dragstart', function (e) { 10 draggedItem = this; 11 offsetX = e.clientX - this.getBoundingClientRect().left; 12 offsetY = e.clientY - this.getBoundingClientRect().top; 13 this.style.opacity = '0.5'; 14 }); 15 16 dragItem.addEventListener('dragend', function () { 17 this.style.opacity = '1'; 18 }); 19 }); 20 21 dragContainer.addEventListener('dragover', function (e) { 22 e.preventDefault(); 23 e.dataTransfer.dropEffect = 'copy'; 24 }); 25 26 dragContainer.addEventListener('drop', function (e) { 27 e.preventDefault(); 28 29 if (draggedItem) { 30 const x = e.clientX - offsetX; 31 const y = e.clientY - offsetY; 32 33 draggedItem.style.left = `${x}px`; 34 draggedItem.style.top = `${y}px`; 35 36 // No need to clone, just move the original element 37 dragContainer.appendChild(draggedItem); 38 39 draggedItem = null; 40 } 41 }); 42 43 dropArea.addEventListener('dragover', function (e) { 44 e.preventDefault(); 45 }); 46 47 dropArea.addEventListener('drop', function (e) { 48 e.preventDefault(); 49 50 if (draggedItem && !dropArea.contains(draggedItem)) { 51 if (dropArea.children.length < 3) { 52 dropArea.appendChild(draggedItem); 53 } else { 54 // Handle maximum 3 items in the drop area 55 } 56 } 57 }); 58}); 59
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
リストの入れ替えやファイルのドロップ等の情報は見つかるのですが、
元のリストを残したままというのを見つけられなかったです。
補足
特になし
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。