VUE 左右拖拽

该文章展示了如何在Vue.js应用中集成vuedraggable库,创建两个可拖动的列表,允许用户在它们之间重新排序元素。通过引入组件,设置数据和事件处理,以及定义拖放组以控制元素移动,实现了列表的拖放功能。
摘要由CSDN通过智能技术生成

第一步:npm i vuedraggable -S

第二步:

<template>
    <div>
        <div>
            <div class="col">
                <draggable v-model="arr1" :group="groupA" :disabled="disabled" animation="300" @start="onStart"
                    @end="onEnd">
                    <transition-group :style="style">
                        <div class="item"  v-for="item in arr1" :key="item.id" >{{item.name}}</div>
                    </transition-group>
                </draggable>
            </div>
            <div class="col">
                <draggable v-model="arr2" :group="groupB" :disabled="disabled" animation="300" @start="onStart"
                    @end="onEnd">
                    <transition-group :style="style">
                        <div class="item"   v-for="item in arr2" :key="item.id" >{{item.name}}</div>
                    </transition-group>
                </draggable>
            </div>
        </div>
    </div>
</template>
<script>
    //导入draggable组件
    import draggable from 'vuedraggable'
    export default {
        //注册draggable组件
        components: {
            draggable
        },
        data() {
            return {
                style: "min-height:120px;display: block;",
                arr1: [{
                        people: 'cn',
                        id: 1,
                        name: '序号1'
                    },
                    {
                        people: 'cn',
                        id: 2,
                        name: '序号2'
                    },
                    {
                        people: 'cn',
                        id: 3,
                        name: '序号3'
                    },
                    {
                        people: 'us',
                        id: 4,
                        name: '序号4'
                    }
                ],
                arr2: [],
                disabled: false,
                //定义要被拖拽对象的数组
                groupA: {
                    name: "itxst",
                    // pull: "clone",//原数组不变
                    put: true, //可以拖出
                },
                groupB: {
                    name: "itxst",
                    put: true,
                }
            }
        },
        methods: {
            onStart() {
                this.drag = true;
            },
            //开始拖拽事件
            onStart() {
                this.drag = true;
            },
            //拖拽结束事件
            onEnd() {
                this.drag = false;
            },
        },
    };
</script>
<style scoped>
    /*定义要拖拽元素的样式*/
    .itxst {
        margin: 10px;
    }

    .col {
        width: 40%;
        height: 500px;
        flex: 1;
        padding: 10px;
        border: solid 1px #55aa00;
        border-radius: 5px;
        float: left;
    }

    .col+.col {
        margin-left: 10px;
    }

    .item {
        padding: 6px 12px;
        margin: 0px 10px 0px 10px;
        border: solid 1px #eee;
        background-color: #f1f1f1;
    }

    .item:hover {
        background-color: #fdfdfd;
        cursor: move;
    }

    .item+.item {
        border-top: none;
        margin-top: 6px;
    }
</style>

Vue.js本身并不是一个直接支持HTML元素拖拽功能的库,但是你可以通过第三方插件如`vue-draggable`或者`vuedraggable`来轻松实现这个功能。以下是一个简单的步骤: 1. 安装插件:首先你需要在项目中安装`vue-draggable`,可以使用npm或yarn进行安装: ```bash npm install vue-draggable # 或者 yarn add vue-draggable ``` 2. 在组件中引入并使用:在Vue文件中导入`vuedraggable`,并在需要拖拽的div上应用这个属性: ```html <template> <draggable v-model="items" :options="{ group: 'people', draggable: '.draggable-element' }"> <div class="draggable-element" v-for="(item, index) in items" :key="index"> {{ item.name }} </div> </draggable> </template> <script> import draggable from "vuedraggable"; export default { components: { draggable }, data() { return { items: [ { name: "Item 1", position: { x: 0, y: 0 } }, // 更多元素... ] }; } }; </script> ``` 在这个例子中,`.draggable-element`是你需要可以被拖动的元素的选择器,`group`属性用于指定哪些元素可以互相拖拽,`position`数据绑定到每个元素上,以便跟踪它们的位置。 3. 监听事件:`vuedraggable`会触发一些事件,如`start`、`end`等,你可以监听这些事件以处理拖拽过程中的各种操作。 ```javascript <script> // ... methods: { onDragEnd(e) { const draggedItem = e.item; this.$set(this.items, draggedItem.index, { ...draggedItem, position: { x: e.x, y: e.y } }); } } </script> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值