当前位置: 首页 > article >正文

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
}

 三.效果


http://www.kler.cn/a/591784.html

相关文章:

  • 【设计模式】3W 学习法全面解析 7 大结构型模式:Java 实战 + 开源框架应用
  • 合React宝宝体质的自定义防抖hook
  • 安全地自动重新启动 Windows 资源管理器Bat脚本
  • css3有哪些新属性
  • 计算机网络-综合布线系统
  • trae和Spring Boot Java 项目 ruoyi框架
  • STM32---FreeRTOS软件定时器
  • 关于非线性优化小记
  • 半导体制造行业的现状 内检LIMS系统在半导体制造的应用
  • Spring Cloud 中的服务注册与发现: Eureka详解
  • mybatis集合映射association与collection
  • WebForms HTML:深入理解与高效应用
  • RS-232与TTL、CMOS的区别
  • 软件工程:数据字典
  • Spring Bean 生命周期深度解析:原理、场景与优化策略
  • Java List 接口的核心 API
  • 【区块链+乡村振兴】国经安农信链服务平台 | FISCO BCOS 应用案例
  • HarmonyOS三层架构实战
  • 算法刷题记录——LeetCode篇(6) [第501~600题](持续更新)
  • 前端安全之DOMPurify基础使用