vue3+elementPlus使用vuedraggable实现照片墙拖拽调整位置

一.什么是vuedraggable?

1.简介:vuedraggable是一个可以实现元素拖拽的vue组件,该组件轻便、实用、简单易上手。通常用于各种表格、表单、看板、列表等功能中

2.下载vuedraggable的命令

npm install vuedraggable --save

下载成功后,可在package.json 文件中查看

 

二.使用vuedraggable结合el-upload图片上传照片墙,实现图片上传后可拖拽调整位置

1.切记,引入组件再使用

import draggable from "vuedraggable";

2.html部分

<draggable v-model="fileList" class="drag_img" item-key="url">
                                    <template #item="{ element }">
                                        <div class="img_item">
                                            <img :src="element.url" alt="" style="width: 100%;height: 100%;">
                                            <!-- 图片的遮罩 预览 和 删除 -->
                                            <div class="shade">
                                                <div class="img_operate">
                                                    <el-icon>
                                                        <ZoomIn @click="handlePictureCardPreview(element)"
                                                            style="cursor:pointer;" />
                                                    </el-icon>
                                                    <el-icon style="margin: 0 10px;">
                                                        <DeleteFilled @click="handleRemove(element)"
                                                            style="cursor: pointer;" />
                                                    </el-icon>
                                                </div>
                                            </div>
                                        </div>
                                    </template>
</draggable>
<!-- 用组件标签包裹住照片墙部分,下方上传图片不用包裹,否则会让上传图片图标也能拖拽 -->
<el-upload v-model:file-list="fileList"
                                    action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
                                    list-type="picture-card" :on-preview="handlePictureCardPreview"
                                    :on-remove="handleRemove" :show-file-list="false">
                                    <el-icon>
                                        <Picture />
                                    </el-icon>
</el-upload>
<el-dialog v-model="dialogVisible">
    <img w-full :src="dialogImageUrl" alt="Preview Image" />
</el-dialog>

3.js部分

import type { UploadProps, UploadUserFile } from 'element-plus'
const fileList = ref<UploadUserFile[]>([
    // 可放置初始图片
])
const dialogImageUrl = ref('')
const dialogVisible = ref(false)
// elementPlus 原删除方法
// const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
//     console.log(uploadFile, uploadFiles)
// }
interface UploadFile {
    status: string;
    url: string;
}
const handleRemove = (uploadFile: UploadFile) => {
    // console.log(uploadFile);
    if (uploadFile?.status && uploadFile?.status === "success") {
        const address = uploadFile.url
        fileList.value = fileList.value.filter(i => i.url !== address)
    }
};

const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
    dialogImageUrl.value = uploadFile.url!
    dialogVisible.value = true
}

 三.效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值