Я перетаскиваю элемент к целевой области. Целевая область действует как ма gnet и «привязывает» элемент к области, когда элемент находится достаточно близко. После привязки к области элемент «захватывается» целевой областью. , , и НЕ может быть вытащен без отскока назад.
Как я могу "выключить" ма gnet и перетащить элемент из целевой области в любом направлении?
const fill = document.querySelector('.fill');
const empties = document.querySelectorAll('.empty');
const container = document.querySelector('.container');
// Fill listeners
fill.addEventListener('dragstart', dragStart);
fill.addEventListener('dragend', dragEnd);
// Loop through empty boxes and add listeners
for (const empty of empties) {
empty.addEventListener('dragover', dragOver);
empty.addEventListener('dragenter', dragEnter);
empty.addEventListener('dragleave', dragLeave);
empty.addEventListener('drop', dragDrop);
}
// Drag Functions
function dragStart() {
this.className += ' hold';
setTimeout(() => (this.className = 'invisible'), 0);
}
function dragEnd() {
this.className = 'fill';
}
function dragOver(e) {
e.preventDefault();
}
function dragEnter(e) {
e.preventDefault();
this.className += ' hovered';
}
function dragLeave() {
this.className = 'empty';
}
function dragDrop() {
this.className = 'empty';
this.append(fill);
}
body {
background: rgb(178, 187, 236);
}
.container {
height: 500px;
width: 100vw;
position: relative;
}
.fill {
display: inline-block;
background-color: black;
position: relative;
height: 150px;
width: 150px;
border-radius: 50%;
top: 5px;
left: 5px;
cursor: pointer;
}
.hold {
border: solid 5px #ccc;
clip-path: circle();
}
.empty {
display: inline-block;
position: relative;
height: 160px;
width: 160px;
left: 500px;
top: 100px;
margin: 10px;
border-radius: 50%;
border: solid 3px salmon;
background: white;
}
.hovered {
background: #f4f4f4;
border-style: dashed;
}
.invisible {
display: none;
}
<div class="container">
<div class="empty"></div>
<div class="fill" draggable="true"></div>
</div>
<!--DRAG THE BLACK CIRCLE TOWARDS THE WHITE TARGET AREA-->
<!--THEN DRAG OUT OF THE TARGET AREA-->