To do Listを作って、登録したリストをDrag and Dropしたいと思いますが、
リストの作成はできますが、順番を変えるためのDrag and Dropがうまくいかないです。
console.logでも特にエラーは発生してないですが、どなたかおしえていただけないでしょうか?
正直、Drag and DropはWEB上に一般公開されているソースから持ってきて、繋げました。
URL: https://www.ipentec.com/document/javascript-list-sortable-item
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>To Do List</title> <style type="text/css"> li { -khtml-user-drag: element; } .done { text-decoration: line-through; } button { margin: 5px; } [draggable] { user-select: none; } #list { list-style-type: none; } .item { width: 100px; padding-bottom: 5px; padding-top: 5px; border-top: 2px solid blue; cursor: move; } .item.dragElem { opacity: 0.4; } </style> </head> <body onload="PageLoad();"> <!--list作成--> <div class="content"> <ul id="list"> </ul> </div> <!--list新規追加--> <div class="add-to-do"> <input type="text" id="input" placeholder="Add a to-do"><button id="add-button">Add</button> </div> <script> const addButton = document.querySelector('#add-button'); addButton.addEventListener('click', function() { const input = document.querySelector('input'); const li = document.createElement('li'); li.setAttribute("draggable","true"); li.classList.add("item"); li.innerText = input.value; const doneButton = document.createElement('button'); doneButton.innerText = 'Done'; li.appendChild(doneButton); doneButton.addEventListener('click', function() { const li = doneButton.closest('li'); li.classList.add('done'); }) const ul = document.querySelector('#list'); ul.appendChild(li); }) /***** ドラッグ & ドロップ処理 *****/ var dragSrcEl = null; function handleDragStart(e) { dragSrcEl = this; e.dataTransfer.effectAllowed = 'move'; e.dataTransfer.setData('text/html', this.outerHTML); this.classList.add('dragElem'); } function handleDragOver(e) { if (e.preventDefault) { e.preventDefault(); } this.classList.add('over'); e.dataTransfer.dropEffect = 'move'; return false; } function handleDragEnter(e) { } function handleDragLeave(e) { this.classList.remove('over'); } function handleDrop(e) { if (e.stopPropagation) { e.stopPropagation(); } if (dragSrcEl != this) { this.parentNode.removeChild(dragSrcEl); var dropHTML = e.dataTransfer.getData('text/html'); this.insertAdjacentHTML('beforebegin', dropHTML); var dropElem = this.previousSibling; addDnDHandlers(dropElem); } this.classList.remove('over'); return false; } function handleDragEnd(e) { this.classList.remove('over'); } function addDnDHandlers(elem) { elem.addEventListener('dragstart', handleDragStart, false); elem.addEventListener('dragenter', handleDragEnter, false) elem.addEventListener('dragover', handleDragOver, false); elem.addEventListener('dragleave', handleDragLeave, false); elem.addEventListener('drop', handleDrop, false); elem.addEventListener('dragend', handleDragEnd, false); } function PageLoad() { var cols = document.querySelectorAll('#list .item'); [].forEach.call(cols, addDnDHandlers); } </script> </body> </html>
あなたの回答
tips
プレビュー