Heim > Web-Frontend > uni-app > Hauptteil

Wie implementiert uni-app+sortable.js die Drag-and-Drop-Sortierung? Schritt teilen

青灯夜游
Freigeben: 2021-11-24 19:49:46
nach vorne
4653 Leute haben es durchsucht

Wie implementiert man die Drag-and-Drop-Sortierung in der Uni-App? Im folgenden Artikel erfahren Sie, wie Sie sortable.js zum Implementieren der Drag-and-Drop-Sortierung in der Uni-App verwenden. Ich hoffe, er wird Ihnen hilfreich sein!

Wie implementiert uni-app+sortable.js die Drag-and-Drop-Sortierung? Schritt teilen

Uni-App-Drag-and-Drop-Sortierung

Vorwort

Als ich diese Woche eine Seite erstellt habe, gab es eine Funktion zum Sortieren von Zeichen, die manuell gezogen werden kann, um die Sortierposition zu ändern. Nach der Suche habe ich

sortable.js gefunden, mit dem sich diese Drag-and-Drop-Funktion implementieren lässt.

Idee

Beim Betrachten des offiziellen Dokuments von sortable.js habe ich gesehen, dass darin ein onUpdate-Ereignis enthalten ist, nachdem ich es gezogen habe, um die Position zu ändern , der Rückgabewert enthält den Startindexwert und den geänderten Indexwert. Dadurch können Sie den Inhalt des Arrays ändern, um die Funktion zum Ändern der Position nach dem Ziehen zu erreichen. sortable.js官方文档时,看到里面中有一个onUpdate事件,拖拽改变位置后,其中的返回值中,就有着起始index值和改变后的index值,通过这个,就可以更改数组的内容,来达到拖拽后改变位置的功能。

步骤

安装sortable.js

npm install sortablejs --save-dev
Nach dem Login kopieren

获取节点

这里获取的节点是需要拖拽列表的父节点

let uls = document.getElementById('list')
Nach dem Login kopieren

加载节点

 new Sortable(uls,{})
Nach dem Login kopieren

触发<span style="font-size: 18px;">onUpdate</span>事件

因为在做的过程中,发现如果用操作dom节点的位置去修改item的顺序时,会产生bug,所以经过查找资料,终于在Vue中使用Sortable找到了问题所在,因此在修改item顺序前,应先修改其对于的节点。

改变节点

先删除移动的节点,在将移动的节点插入到原有的节点中

newLi = uls.children[newIndex],  //移动节点
oldLi = uls.children[oldIndex];  //原有节点
uls.removeChild(newLi) // 删除移动的节点
uls.insertBefore(newLi, oldLi) // 将移动节点插入到原有节点中
Nach dem Login kopieren

注意:因为当从下向上拖动时,节点会增加一个,所以原有的索引值会少一位,所在当newIndex < oldIndex时,因使用oldLi

Schritte

Installieren Sie sortable.js

uls.insertBefore(newLi, oldLi.nextSibling)
Nach dem Login kopieren
Holen Sie sich den Knoten

Der hier erhaltene Knoten ist der übergeordnete Knoten, der in die Liste gezogen werden muss

let item = _this.items.splice(oldIndex, 1)
Nach dem Login kopieren

🎜Laden Sie den Knoten. 🎜
_this.items.splice(newIndex, 0, item[0])
Nach dem Login kopieren
Um die Reihenfolge der Elemente zu ändern, tritt ein Fehler auf. Nach der Suche nach Informationen habe ich schließlich das Problem bei der Verwendung von Sortable in Vue gefunden🎜 Bevor Sie die Reihenfolge der Elemente ändern, sollten Sie zunächst den Knoten ändern, dem sie entspricht. 🎜🎜🎜Knoten ändern🎜🎜🎜Löschen Sie zuerst den verschobenen Knoten und fügen Sie dann den verschobenen Knoten in den ursprünglichen Knoten ein🎜
let uls = document.getElementById(&#39;list&#39;)
    new Sortable(uls, {
      onUpdate: function (event) {
        //获得基础数据
        let newIndex = event.newIndex,
          oldIndex = event.oldIndex,
          newLi = uls.children[newIndex],
          oldLi = uls.children[oldIndex];
        // 删除原有节点
        uls.removeChild(newLi)
        // 将移动的节点插入原有节点中
        if (newIndex > oldIndex) {
          uls.insertBefore(newLi, oldLi)
        } else {
          uls.insertBefore(newLi, oldLi.nextSibling)
        }
        // 修改数组
        let item = _this.items.splice(oldIndex, 1)
        _this.items.splice(newIndex, 0, item[0])
      },
Nach dem Login kopieren
🎜Hinweis: Denn beim Ziehen von unten nach oben erhöht sich der Knoten um eins, also der ursprüngliche Index Der Wert wird eins weniger sein, denn wenn newIndex < oldIndex, weil der nächste Knoten des oldLi-Knotens verwendet wird 🎜rrreee🎜🎜, um das Array zu ändern 🎜🎜🎜, um das zu löschen ursprüngliches Array und speichere die Daten🎜rrreee🎜Füge die Daten zum verbleibenden Array-Indexwert hinzu🎜rrreee🎜🎜Vollständiger Code🎜🎜rrreee🎜Empfohlen: „🎜uniapp-Tutorial🎜“🎜

Das obige ist der detaillierte Inhalt vonWie implementiert uni-app+sortable.js die Drag-and-Drop-Sortierung? Schritt teilen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage