console
const ls = document.getElementsByClassName('grid-item');
const container = document.querySelector('#grid-container');
console.log(ls.length);
Array.from(ls).map((ele) => {
ele.addEventListener('mousedown', function (event) {
isDragging = true;
cloneElement = ele.cloneNode(true);
cloneElement.classList.add('draggable-element');
document.body.appendChild(cloneElement);
updatePosition(event);
ele.style.visibility = 'hidden';
document.addEventListener('mousemove', handleMouseMove);
document.addEventListener('mouseup', handleMouseUp);
});
function handleMouseUp(e) {
isDragging = false;
if (cloneElement) {
cloneElement.remove();
}
ele.style.visibility = 'visible';
const rectDropzone = container.getBoundingClientRect();
if (
event.clientX >= rectDropzone.left &&
event.clientX <= rectDropzone.right &&
event.clientY >= rectDropzone.top &&
event.clientY <= rectDropzone.bottom
) {
}
document.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('mouseup', handleMouseUp);
}
function handleMouseMove(event) {
if (isDragging && cloneElement) {
requestAnimationFrame(() => updatePosition(event));
}
}
function updatePosition(event) {
if (isDragging && cloneElement) {
cloneElement.style.left = event.clientX - cloneElement.clientWidth / 2 + 'px';
cloneElement.style.top = event.clientY - cloneElement.clientHeight / 2 + 'px';
}
}
});
<div id="grid-container">
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
<div class="grid-item">Item 4</div>
<div class="grid-item">Item 5</div>
<div class="grid-item">Item 6</div>
<div class="grid-item">Item 7</div>
<div class="grid-item">Item 8</div>
<div class="grid-item">Item 9</div>
<div class="grid-item">Item 10</div>
<div class="grid-item">Item 11</div>
<div class="grid-item">Item 12</div>
<div class="grid-item">Item 13</div>
<div class="grid-item">Item 14</div>
<div class="grid-item">Item 15</div>
<div class="grid-item">Item 16</div>
<div class="grid-item">Item 17</div>
<div class="grid-item">Item 18</div>
<div class="grid-item">Item 19</div>
</div>
#grid-container {
display: grid;
grid-template-columns: repeat(8, 50px);
grid-template-rows: repeat(4, 50px);
gap: 10px;
width: fit-content;
margin: auto;
border: 1px solid #ccc;
}
.drag-item {
opacity: 0 !important;
}
.grid-item {
transition: all 0.01s;
opacity: 1;
background-color: #3498db;
width: 30px;
height: 30px;
color: #fff;
padding: 10px;
text-align: center;
font-size: 12px;
border: 1px solid #fff;
}
.draggable-element {
position: absolute;
}