1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>drag and drop</title>
<style> #content1, #content2 { height: 200px; padding: 1em; }
#content1 { background-color: rgba(255, 0, 255, 0.2); }
#content2 { background-color: rgba(0, 255, 255, 0.2); }
#drag-item { display: inline-block; padding: 1em; background-color: greenyellow; cursor: move; }
#console { width: 100%; height: 300px; resize: none; } </style> </head>
<body> <h3>拖动绿色元素到容器1或容器2</h3>
<div id="content1"> <h3>容器1(粉色背景)</h3> <div id="drag-item" draggable="true">请拖动我</div> </div>
<div id="content2"> <h3>容器2(蓝色背景)</h3> </div>
<h3>信息输出</h3> <textarea id="console"></textarea>
<script> const $content1 = document.getElementById("content1"), $content2 = document.getElementById("content2"), $dragItem = document.getElementById("drag-item"), $console = document.getElementById("console");
const consoleScrollToButton = () => { $console.scrollTop = $console.scrollHeight; };
let dragTimer = 0, dragInterval = 500; const drag = (ev) => { if (dragTimer) return; dragTimer = setTimeout(() => { let { offsetX, offsetY } = ev; $console.value += `drag 元素正在被拖动,位置:x=${offsetX},y=${offsetY}\r\n`; consoleScrollToButton(); dragTimer = 0; }, dragInterval); }; const dragstart = (ev) => { $console.value += "dragstart 元素开始拖动了\r\n"; consoleScrollToButton(); }; const dragend = (ev) => { $console.value += "dragstart 元素结束拖动了\r\n"; consoleScrollToButton(); }; $dragItem.addEventListener("drag", drag); $dragItem.addEventListener("dragstart", dragstart); $dragItem.addEventListener("dragend", dragend);
const dragenter = (ev) => { let name = ev.currentTarget.querySelector("h3").innerText; $console.value += `dragenter 进入了${name}\r\n`; consoleScrollToButton(); }; const dragleave = (ev) => { let name = ev.currentTarget.querySelector("h3").innerText; $console.value += `dragleave 离开了${name}\r\n`; consoleScrollToButton(); }; let dragoverTimer = 0, dragoverInterval = 500; const dragover = (ev) => { ev.preventDefault(); let { currentTarget } = ev; if (dragoverTimer) return; dragoverTimer = setTimeout(() => { let name = currentTarget.querySelector("h3").innerText; let { offsetX, offsetY } = ev; $console.value += `drag 元素正在${name}上被拖动,位置:x=${offsetX},y=${offsetY}\r\n`; consoleScrollToButton(); dragoverTimer = 0; }, dragoverInterval); }; const drop = (ev) => { let name = ev.currentTarget.querySelector("h3").innerText; $console.value += `drop 放入了${name}\r\n`; ev.currentTarget.appendChild($dragItem); consoleScrollToButton(); }; $content1.addEventListener("dragenter", dragenter); $content2.addEventListener("dragenter", dragenter); $content1.addEventListener("dragleave", dragleave); $content2.addEventListener("dragleave", dragleave); $content1.addEventListener("dragover", dragover); $content2.addEventListener("dragover", dragover); $content1.addEventListener("drop", drop); $content2.addEventListener("drop", drop); </script> </body> </html>
|