LianSheng

2020Q4_JS - drag&drop

Nov 25th, 2020 (edited)
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 2.99 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5.     <meta charset="UTF-8">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>主視窗</title>
  8. </head>
  9.  
  10. <body>
  11.     <div id="tab">
  12.         <div>A</div>
  13.         <div>B</div>
  14.         <div>C</div>
  15.     </div>
  16.     <div id="container"> </div>
  17.  
  18.     <div id="dragTarget">
  19.         <h2>把資料放到這裡</h2>
  20.         <div id="data"></div>
  21.     </div>
  22.  
  23.     <style>
  24.         #dragTarget {
  25.             vertical-align: top;
  26.             display: inline-block;
  27.             width: 600px;
  28.             height: 300px;
  29.             background-color: #fdb6c4;
  30.             user-select: none;
  31.         }
  32.  
  33.         #container {
  34.             /* position: fixed; */
  35.             width: 20vw;
  36.             max-width: 300px;
  37.             height: 60vh;
  38.             display: inline-block;
  39.             overflow-y: auto;
  40.         }
  41.  
  42.         #tab {
  43.             vertical-align: top;
  44.             display: inline-block;
  45.         }
  46.  
  47.         #tab>div {
  48.             background-color: aquamarine;
  49.             margin-top: 10px;
  50.             margin-bottom: 10px;
  51.             padding: 4px;
  52.             font-size: 2rem;
  53.             cursor: pointer;
  54.             user-select: none;
  55.         }
  56.  
  57.         button {
  58.             margin: 4px;
  59.             background-color: #f8ff95;
  60.         }
  61.     </style>
  62.  
  63.     <script>
  64.         let target = document.querySelector('#dragTarget');
  65.         let targetData = document.querySelector('#dragTarget > #data');
  66.         let container = document.querySelector("#container");
  67.         let dragged;
  68.  
  69.         // 這個事件必須迴避預設動作,否則 ondrop 無法正常執行
  70.         target.ondragover = e => {
  71.             e.preventDefault();
  72.         }
  73.  
  74.         target.ondrop = e => {
  75.             e.preventDefault();
  76.  
  77.             // 取得拖進來的文字
  78.             let dragText = dragged.getAttribute("data-real");
  79.             targetData.innerHTML += `<p>${dragText}</p>`;
  80.         }
  81.  
  82.         // 記錄是拖動哪個物件
  83.         document.addEventListener("dragstart", e => {
  84.             dragged = e.target;
  85.         });
  86.  
  87.         document.querySelectorAll("#tab > div").forEach(tab => {
  88.             tab.onmouseover = e => {
  89.                 // 先刪除原本的 active
  90.                 document.querySelectorAll("#tab > div.active").forEach(
  91.                     active => active.classList.remove("active")
  92.                 );
  93.  
  94.                 // 產生假資料
  95.                 let html = "";
  96.  
  97.                 for (let i = 0; i < 100; i++) {
  98.                    html += `
  99.                    <button draggable="true" data-real="真實的資料(來自 ${tab.innerText} - ${i+1})">
  100.                         ${tab.innerText} - ${i+1}
  101.                     </button>
  102.                     `;
  103.                 }
  104.  
  105.                 container.innerHTML = html;
  106.  
  107.                 // 標示目前的 tab 爲 active
  108.                 tab.classList.add("active");
  109.             }
  110.         });
  111.     </script>
  112. </body>
  113.  
  114. </html>
Add Comment
Please, Sign In to add comment