Я делаю функцию перетаскивания, используя чисто угловой и машинописный текст без какой-либо библиотеки.
HTML:
<div class="listArea">
<h4> Drag and Drop list in Green Area: </h4>
<ul class="unstyle">
<li id="1" draggable="true" (dragstart)="drag($event)">
i am list 1
</li>
<li id="2" draggable="true" (dragstart)="drag($event)">
i am list 2
</li>
<li id="3" draggable="true" (dragstart)="drag($event)">
i am list 3
</li>
<li id="4" draggable="true" (dragstart)="drag($event)">
i am list 4
</li>
</ul>
</div>
<div class="buildArea" id="div1" (drop)="drop($event)" (dragover)="allowDrop($event)">
<h4> Drop Here </h4>
</div>
TS:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
allowDrop(ev) {
ev.preventDefault();
}
drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data).cloneNode(true));
}
}
Работает Stackblitz: https://stackblitz.com/edit/angular-wyimor
В приведенном выше примере я могу перетаскивать элементы списка из одного элемента в другой.
Здесь я использовал,
ev.target.appendChild(document.getElementById(data).cloneNode(true));
Так что его добавление к последнему из ранее отброшенных.
Но мне нужно отбросить элементы списка там, где нужно пользователю.
Например, если пользователь перетаскивает список в порядке,
I am list 1
I am list 2
I am list 4
I am list 5
Где пользователь теперь перетаскивает список I am list 3
и должен находиться между I am list 2
и I am list 4
.
Пропущенный элемент должен быть отдельным списком без добавления в li
.
Пожалуйста, помогите добиться перетаскивания элементов перетаскиваемого списка между элементами пропущенного списка, куда пользователь захочет.