Ich habe mich gefragt, ob/wie ich die Position, an die ich das ziehbare Div in der Tabelle verschoben habe, speichern könnte, damit die Seite beim erneuten Laden an die Stelle zurückkehrt, an der sie aufgehört hat (aus der MySQL-Datenbank).
Ich habe einige verwandte Artikel gelesen, in denen es jedoch ausschließlich um die Verwendung von JQuery (Ereignissen, Benutzeroberfläche) mit AJAX ging.
Das ist mein Code:
var p = document.getElementsByTagName('p'); var choice = document.getElementsByClassName('choice'); var dragItem = null; for(var i of p){ i.addEventListener('dragstart', dragStart); i.addEventListener('dragend', dragEnd); } function dragStart(){ dragItem = this; setTimeout(()=>this.style.display = "none", 0); } function dragEnd(){ setTimeout(()=>this.style.display = "block", 0); dragItem = null; } for(j of choice){ j.addEventListener('dragover', dragOver); j.addEventListener('dragenter', dragEnter); j.addEventListener('dragleave', dragLeave); j.addEventListener('drop', Drop); } function Drop(){ this.append(dragItem); } function dragOver(e){ e.preventDefault(); this.style.border = "2px dotted cyan"; } function dragEnter(e){ e.preventDefault(); } function dragLeave(e){ this.style.border = "none"; }
section{ width: 1000px; height: 360px; margin: 100px auto; display: flex; justify-content: space-around; } h1{ text-align: center; } div{ width: 200px; height: 90%; padding: 20px; margin: 10px; background: #fafafa; box-sizing: border-box; } p{ font-weight: bold; border-radius: 5px; padding: 5px; color: white; background: red; } table, th, td { border:1px solid black; } button{ width: 100px; height: 15px; padding: 15px; margin: 10px; background: gray; box-sizing: border-box; }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>test drag & drop </title> </head> <body> <h1> it's just a test for js </h1> <section> <div2> <table style="width:100%"> <tr> <th>time</th> <th>DIM</th> <th>LUN</th> </tr> <tr> <td>8:00 - 9:00</td> <td><div class="choice"></div> S1-1</td> <td><div class="choice"></div>S1-2</td> </tr> <tr> <td>9:00 - 10:00</td> <td><div class="choice"></div>S2-1</td> <td><div class="choice"></div>S2-2</td> </tr> </table> <button>save</button> </div2> <div class="choice"> <p draggable="true">MODULE 1</p> <p draggable="true">MODULE 2</p> <p draggable="true">MODULE 3</p> <p draggable="true">MODULE 4</p> <p draggable="true">MODULE 5</p> </div> </section> </body> </html>
这可能是一个过于复杂的答案。但我觉得最好的方法是在 JavaScript 中存储
module
对象的数组。每个module
都有一个position
属性,每次移动模块时都需要更新该属性。您还可以使用data
html 属性来存储元素本身在元素上的位置(https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes)。这是我的代码:Javascript:
HTML:
要更新数据库,您可以在每次移动模块时进行
write
数据库调用。然后每次加载页面时,只需根据position
值对数组进行排序即可。希望这有帮助!