>  기사  >  웹 프론트엔드  >  uni-app+sortable.js는 드래그 앤 드롭 정렬을 어떻게 구현합니까? 단계 공유

uni-app+sortable.js는 드래그 앤 드롭 정렬을 어떻게 구현합니까? 단계 공유

青灯夜游
青灯夜游앞으로
2021-11-24 19:49:464655검색

uni-app에서 드래그 앤 드롭 정렬을 구현하는 방법은 무엇입니까? 다음 글에서는 sortable.js를 사용하여 uni-app에서 드래그 앤 드롭 정렬을 구현하는 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다.

uni-app+sortable.js는 드래그 앤 드롭 정렬을 어떻게 구현합니까? 단계 공유

uni-app 드래그 앤 드롭 정렬

머리말

이번주에 페이지를 만들다가 수동으로 드래그하여 정렬 위치를 변경할 수 있는 문자 정렬 기능이 있었습니다. 검색 끝에 이 드래그 앤 드롭 기능을 구현하는 데 사용할 수 있는

sortable.js을 찾았습니다.

Idea

sortable.js 공식 문서를 보니 onUpdate 이벤트가 있어서 위치를 변경하고 있습니다. , 반환 값에는 시작 인덱스 값과 변경된 인덱스 값이 포함됩니다. 이를 통해 배열의 내용을 변경하여 드래그 후 위치를 변경하는 기능을 구현할 수 있습니다. sortable.js官方文档时,看到里面中有一个onUpdate事件,拖拽改变位置后,其中的返回值中,就有着起始index值和改变后的index值,通过这个,就可以更改数组的内容,来达到拖拽后改变位置的功能。

步骤

安装sortable.js

npm install sortablejs --save-dev

获取节点

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

let uls = document.getElementById('list')

加载节点

 new Sortable(uls,{})

触发<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) // 将移动节点插入到原有节点中

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

Steps

sortable.js 설치

uls.insertBefore(newLi, oldLi.nextSibling)
노드 가져오기

여기에서 얻은 노드가 목록으로 드래그해야 하는 상위 노드입니다

let item = _this.items.splice(oldIndex, 1)

🎜노드 로드🎜 🎜
_this.items.splice(newIndex, 0, item[0])
🎜🎜🎜는 🎜🎜onUpdate🎜🎜 이벤트🎜🎜🎜🎜를 트리거합니다. 왜냐하면 이를 수행하는 과정에서 dom 노드의 위치를 ​​사용하면 발견했습니다. 항목 순서를 수정하면 버그가 발생하기 때문에 정보 검색 끝에 Vue에서 Sortable을 사용하여 문제를 발견했습니다🎜 항목 순서를 수정하기 전에 먼저 해당 노드를 수정해야 합니다. 🎜🎜🎜노드 변경🎜🎜🎜먼저 이동한 노드를 삭제한 다음 이동한 노드를 원래 노드에 삽입하세요🎜
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])
      },
🎜참고: 아래에서 위로 드래그하면 노드가 1씩 증가하므로 원래 인덱스 값은 newIndex < oldIndex일 때 oldLi 노드의 다음 노드를 사용하여 🎜rrreee🎜🎜 배열을 변경하고 🎜🎜🎜 원본 배열, 그리고 데이터 저장🎜rrreee🎜나머지 배열 인덱스 값에 데이터 추가🎜rrreee🎜🎜전체 코드🎜🎜rrreee🎜권장: "🎜uniapp tutorial🎜"🎜

위 내용은 uni-app+sortable.js는 드래그 앤 드롭 정렬을 어떻게 구현합니까? 단계 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제