vuedraggable实现列表拖拽排序

特点

    支持触摸设备,支持智能滚动;

    支持拖拽和选择文本以及不同列表之间的拖拽;

    拖拽和视图模型同步刷新,兼容Vue 2.0 的过渡动画;

    支持撤销操作,需求定制性高。

安装

    npm install vuedraggable

引入

    import draggable from 'vuedraggable'

示例

<template>
    <div class="draggable">
        <Draggable v-model="tableData" animation="500" >
            <div class="items" v-for="(item, index) in tableData" :key="index">
                {{ item.name }}
            </div>
        </Draggable>
    </div>
</template>
<script>
import Draggable from 'vuedraggable';
export default {
    components: {Draggable},
    data() {
        return {
            tableData: [
                {
                    name: '张三',
                    test: '我是张三'
                },
                {
                    name: '李四',
                    test: '我是李四'
                },
                {
                    name: '王五',
                    test: '我是王五'
                }
            ]
        };
    }
};
</script>
<style scoped>
.draggable{
  padding:20px;
}
.items{
  width:200px;
  text-align:center;
  border:1px solid #ccc;
  height:30px;
  line-height: 30px;
  margin-top:10px;
  cursor:pointer;
}
</style>

过滤某个元素 filter

<template>
    <div class="draggable">
        <Draggable v-model="tableData" animation="500" filter=".zhangsan">
            <div class="items" v-for="(item, index) in tableData" :key="index" :class="item.class">
                {{ item.name }}
            </div>
        </Draggable>
    </div>
</template>
<script>
import Draggable from 'vuedraggable';
export default {
    components: { Draggable },
    data() {
        return {
            tableData: [
                {
                    name: '张三',
                    test: '我是张三',
                    class: 'zhangsan'
                },
                {
                    name: '李四',
                    test: '我是李四',
                    class: 'lisi'
                },
                {
                    name: '王五',
                    test: '我是王五',
                    class: 'wangwu'
                }
            ]
        };
    }
};
</script>
<style scoped>
.draggable {
    padding: 20px;
}
.items {
    width: 200px;
    text-align: center;
    border: 1px solid #ccc;
    height: 30px;
    line-height: 30px;
    margin-top: 10px;
    cursor: pointer;
}
</style>

回调事件 onStart onEnd

onStart 可以获取拖拽前的列表数据
onEnd 可以获取拖拽后的列表数据

<template>
    <div class="draggable">
        <Draggable v-model="tableData" animation="500" @start="onStart" @end="onEnd">
            <div class="items" v-for="(item, index) in tableData" :key="index">
                {{ item.name }}
            </div>
        </Draggable>
    </div>
</template>
<script>
import Draggable from 'vuedraggable';
export default {
    components: { Draggable },
    data() {
        return {
            tableData: [
                {
                    name: '张三',
                    test: '我是张三'
                },
                {
                    name: '李四',
                    test: '我是李四'
                },
                {
                    name: '王五',
                    test: '我是王五'
                }
            ]
        };
    },
    methods: {
        onStart() {
            console.log('开始拖拽');
        },
        onEnd() {
            console.log('结束拖拽');
        }
    }
};
</script>
<style scoped>
.draggable {
    padding: 20px;
}
.items {
    width: 200px;
    text-align: center;
    border: 1px solid #ccc;
    height: 30px;
    line-height: 30px;
    margin-top: 10px;
    cursor: pointer;
}
</style>

属性

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容