vue+transition-group实现拖动排序

Posted web半晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue+transition-group实现拖动排序相关的知识,希望对你有一定的参考价值。

<transition-group id='app' name="drog" tag="ul">
	<div draggable="true" v-for="(item, index) in lists" @dragstart="dragStart($event, index)" @dragover="allowDrop" @drop="drop($event, index)" v-bind:key="item">{{item}}</div>
</transition-group>

new Vue({
    el: '#app',
    data: {
        lists: ['1: apple', '2: banana', '3: orange', '4: melon']
    },
    
	methods: {
        // 取消默认行为
        allowDrop(e){
            e.preventDefault();
        },
        
        // 开始拖动
        dragStart(e, index){
            let tar = e.target;
            e.dataTransfer.setData('Text', index);
            if (tar.tagName.toLowerCase() == 'li') {
                // console.log('drag start')
                // console.log('drag Index: ' + index)
            }
        },
        
        // 放置
        drop(e, index){
            this.allowDrop(e);
            // console.log('drop index: ' + index);
            //使用一个新数组重新排序后赋给原变量
            let arr = this.lists.concat([]),
                dragIndex = e.dataTransfer.getData('Text');
                temp = arr.splice(dragIndex, 1);
            arr.splice(index, 0, temp[0]);
            // console.log('sort');
            this.lists = arr;
        }
    }
});

以上是关于vue+transition-group实现拖动排序的主要内容,如果未能解决你的问题,请参考以下文章

vue的transition-group实现列表的添加和删除动画

vue.draggable拖拽组件中用transition-group包裹拖拽组件了,拖拽还是没有动画?

Vue.js 源码分析(二十九) 高级应用 transition-group组件 详解

vue的transition-group 下面每个元素分别执行动画

使用 CSS 和 jQuery 创建自己的 Vue <transition-group> 动画

vue列表过渡效果