vue3 拖拽组件 vuedraggable的使用 demo

效果图:

<template>
    <div class="container mover">
        <!-- animation 拖拽的过渡动画的时间 -->
        <!-- onStart 开始拖拽的事件 -->
        <!-- onEnd 拖拽结束的事件 -->
        <!-- ghost-class 当前正在被拖拽的元素 的样式的类名  -->
        <!-- sort 是否可以进行拖拽,false 不可以进行拖拽,  默认为true -->
        <!-- delay 鼠标按下去 多少秒之后才可以进行拖拽 -->
        <!-- handle 表示 当鼠标落在handle指定的元素上面时才允许拖动,下面的例子中 只有鼠标放到 + 的div 才能拖拽 -->
        <!-- filter 表示鼠标落在filter指定的元素上面 不允许拖动,和 handle正好相反 -->
        <!-- draggable 表示样式为item的元素才能被拖动 -->
        <draggable :list="list" animation="300" @start="onStart" delay="3" :sort="true" @end="onEnd" item-key="name"
            ghost-class="ghost" handle=".mover" filter=".unmover" draggable=".item" fallback-tolerance="80">
            <template #item="{ element }">
                <div class="item ">
                    <div class="mover">+</div>


                    {{ element.name }}{{ element.id }}

                    <div class="mover unmover">-</div>
                </div>
            </template>
        </draggable>

    </div>
</template>

<script lang="ts">
import { defineComponent, reactive, toRefs } from "vue"
import draggable from "vuedraggable";
export default defineComponent({
    name: "HomeIndex",
    components: { draggable },
    setup() {
        const state = reactive({
            list: [
                {
                    name: '1',
                    id: 1,
                },
                {
                    name: '1',
                    id: 2,
                },
                {
                    name: '3',
                    id: 3,
                },
                {
                    name: '4',
                    id: 4,
                },
                {
                    name: '5',
                    id: 5,
                    disabled: false
                },
            ]
        })
        const onStart = () => {
            console.log('%c 开始拖', 'color:red');

        }
        const onEnd = () => {
            console.log('%c 结束拖', 'color:green');

        }
        return {
            ...toRefs(state),
            onStart,
            onEnd
        }
    }
})
</script>

<style lang="less" scoped>
.container {
    width: 100vw;
    height: 100vh;
    background: salmon;

    .item {
        width: 80%;
        height: 5vh;
        background: skyblue;
        border: 2px solid red;
        margin: 20px;
        display: flex;
        justify-content: space-between;

        .mover {
            width: 50px;
            height: 100%;
            background: red;
            font-size: 25px;
            text-align: center;
        }

        .unmover {
            width: 50px;
            height: 100%;
            background: red;
            font-size: 20px;
            text-align: center;
            float: right;
        }
    }

    .ghost {
        background: #0333f2 !important;
    }


}
</style>  

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值