vue3+elementUi-plus+vuedraggable上传图片后,图片列表可拖拽排序

vue3图片拖拽后重新排序 【代码】vue3图片拖拽后重新排序。 阅读详情

需求:实现图片列表的拖拽且重新排序,更方便直接调整图片位置

实例代码:

vue3 安装会报错:Cannot read property 'header' of undefined。安装最新版本的vuedraggable即可,命令行如下:

npm i -S vuedraggable@next

<template>
  <div>
    // v-model 绑定的是图片列表 我的数据是[{address:'图片地址'}] item-key绑定唯一的值 不然拖拽会抖动
    <draggable v-model="obj.attr_value" class="drag_img" item-key="address">
    // draggable 版本语法 通过插槽获取到元素的每一项
      <template #item="{ element }">
       <div class="img_item">
        <img :src="element.address" 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>
    
    // 图片上传 obj.那些 改为你们对应的数据 :show-file-list="false"这个必须有 别的看你们需求了
    <el-upload :file-list="obj.attr_value" :action="uploadUrl" list-type="picture-card"
      :on-preview="handlePictureCardPreview" :on-remove="handleRemove" :on-success="handleUploadSuccess"
      :before-upload="beforeUpload" :limit="obj.attr_limit || imgLimit" :on-exceed="handleExceed"
      :accept="obj.attr_accept || uploadImgAccepts.join(',')" :auto-upload="true" v-loading="loading" :multiple="true"
      :show-file-list="false">
      <el-icon>
        <Plus />
      </el-icon>
    </el-upload>
  </div>
</template>
 
// 最不重要的部分 处理的方法 参考一下就行
<script lang="ts" setup>
import { baseURL } from '@/service/index';
import { uploadImgAccepts } from '@/utils/constants';
import { Plus, ZoomIn } from "@element-plus/icons-vue";
import { ElMessage } from "element-plus";
import { computed, onMounted, ref } from "vue";
import draggable from "vuedraggable";
const props = defineProps({
  obj: {
    type: Object,
    default: () => ({}),
  },
  prop: {
    type: String,
    default: "",
  },
});
const uploadUrl = computed(() => {
  return baseURL + '/minio/upload'
})
const maxUpload = 10 // M
const imgLimit = props.obj.attr_limit ?? 50
let { obj } = props;
const loading = ref(false)
const rules = [
  {
    required: obj.attr_isRequired === 1,
    validator: obj["validator"],
    trigger: "change",
  },
];
const dialogImageUrl = ref("");
const dialogRef = ref();
const handleUploadSuccess = (response) => {
  if (response.code === 200) {
    const data = response.data
    obj.attr_value.push({ ...data, url: data.address, name: data.originalFileName })
  } else {
    ElMessage.error(response.message)
  }
  loading.value = false
};
const handleRemove = (uploadFile) => {
  // console.log(toRaw(uploadFile));
  if (uploadFile.response && uploadFile.status === "success") {
    const address = uploadFile.response.data.address
    obj.attr_value = props.obj.attr_value.filter(i => i.address !== address)
  } else if (uploadFile.address) {
    obj.attr_value = props.obj.attr_value.filter(i => i.address !== uploadFile.address)
  }
};
const handlePictureCardPreview = (uploadFile) => {
  dialogImageUrl.value = uploadFile.url;
  dialogRef.value.openModal();
};
const handleExceed = () => {
  ElMessage.warning(`上传图片不能超过${imgLimit}张`);
};
const beforeUpload = (rawFile) => {
  if (rawFile.size / 1024 / 1024 > maxUpload) {
    ElMessage.warning(`上传的图片不能超过${maxUpload}M`);
    return false;
  }
  loading.value = true
  return true;
};
onMounted(() => {});
</script>

// 样式也很简单 需要的可以直接带走
<style scoped lang='scss'>
.drag_img {
  display: flex;
  width: 100%;
  flex-wrap: wrap;
 
  .img_item {
    height: 148px;
    width: 148px;
    padding: 0px 10px 10px 0;
    box-sizing: border-box;
    position: relative;
  }
}
 
.shade {
  position: absolute;
  left: 0;
  top: 0;
  right: 10px;
  bottom: 10px;
  cursor: default;
  text-align: center;
  padding: 0 10px 10px 0;
  color: #fff;
  opacity: 0;
  box-sizing: border-box;
  font-size: 20px;
  background-color: rgba(0, 0, 0, 0.5);
  -webkit-transition: opacity 0.3s;
  transition: opacity 0.3s;
  display: flex;
  justify-content: center;
  align-items: center;
 
  .img_operate {
    padding: 10px 0 0 10px;
  }
 
  &:hover {
    opacity: 1;
  }
}
</style>

Over!~  完美!

基于vue-draggable 实现三级拖动排序效果 主要介绍了基于vue-draggable 实现三级拖动排序效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 立即下载

相关推荐

vue插件draggable实现拖拽移动图片顺序

主要为大家详细介绍了vue插件draggable实现拖拽移动图片顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

vue3+vuedraggable的上传图片后 图片列表的拖拽排序

技术:vue3 + vuedraggable(4.1.0) + element plus的el-upload 代码如下。问题:实现图片列表的拖拽排序 更方便调整图片位置--如果用的v2我文章也有。

2301_76607997的博客 736

华为私有云HCS 8.1.1实战:从镜像制作到云主机发放全流程指南

本文详细解析了华为私有云HCS 8.1.1从镜像制作到云主机发放的全流程实战指南。内容涵盖制作标准化QCOW2镜像、配置云主机规格与主机组、规划外部网络,以及在运营面为租户初始化资源、配置审批流与产品目录。最后,通过用户视角演示了从创建VPC网络到申请、审批并最终绑定EIP访问云主机的完整操作步骤,为运维人员和架构师提供了一套清晰、可落地的HCS部署与管理实践方案。

weixin_29305313的博客 1128

vue3图片拖拽排序

vue3图片拖拽排序

风再起时_H的博客 3244

高动态范围结构光三维测量技术:从多曝光融合到深度学习的演进与应用

本文深入探讨了高动态范围结构光三维测量技术的演进与应用,从传统的多曝光融合技术到深度学习驱动的创新方案。通过工业案例展示了该技术在提升测量精度和效率方面的显著优势,特别是在处理高反光、复杂表面时的突破性表现。文章还提供了针对不同工业场景的技术选型指南,帮助工程师优化三维测量解决方案。

weixin_29063979的博客 293

从零构建企业级多智能体系统:LangGraph 全流程实战 + 部署指南(含代码与架构图)

> 在大模型应用爆发的今天,如何构建一个可协作、可调试、可部署的多智能体系统?LangGraph 正在成为工程师的新宠。本文从原理剖析、流程建模、代码实战到前后端部署,手把手带你用 LangGraph 构建一个企业级 AI 助理系统,整合财务分析、法务审阅、报告生成与图表可视化等 Agent 模块,全面打通从用户输入到报告输出的全链路闭环。适合有工程思维的 AI 架构师、Agent 研发人员、以及大模型项目实践者。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3451

vue2+elementUI+vuedraggable图片上传后可拖曳排序

vue2结合elementUI、vuedraggable实现图片上传并可拖曳图片排序

宁 1673

【零基础】手把手教你使用Docker部署Springboot项目(详细版)

还不会使用Docker部署Springboot项目的小伙伴,不妨进来看看呗,希望文中内容对你有所帮助!

fengprogrammer的博客 2万+

draggable组件实现两层拖拽面板

本文介绍了基于Vue.js实现的层级拖拽功能解决方案,使用vuedraggable库实现父维度和子维度的嵌套拖拽交互。核心要点包括:1)父维度只能与同级父维度交换位置;2)子维度只能在同一父维度下的子维度间交换;3)通过handle属性设置拖拽手柄;4)使用CSS样式实现父子节点的视觉连线效果。文章提供了完整的代码实现,包含表单验证、添加/删除维度等交互功能,并强调了实现注意事项,如必须设置拖拽ID、正确处理slot结构等。该方案适用于需要实现复杂层级拖拽交互的场景。

lugfgfv的博客 288

TC264摄像头循迹进阶:八邻域与逐行遍历在复杂赛道边界提取中的实战对比

本文对比分析了TC264摄像头循迹中八邻域法与逐行遍历法在复杂赛道边界提取中的实战表现。八邻域法在边界连续性方面表现优异,适合处理环岛等复杂元素;逐行遍历法则在计算效率和岔路口识别上更具优势。文章提供了详细的代码实现和优化策略,帮助智能车竞赛选手根据赛道特点选择最佳算法方案。

rainy的博客 939

保姆级教程:在爱快iKuai虚拟机里装OpenWrt旁路由,实现去广告和特殊功能

本文提供在爱快iKuai虚拟机中安装OpenWrt旁路由的详细教程,帮助用户实现去广告和特殊功能扩展。通过分步指导,包括虚拟机配置、网络设置和功能优化,打造稳定高效的家庭网络环境,特别适合软路由爱好者和网络管理员。

weixin_31364787的博客 830

vue 和element上传图片以及进行拖拽图片排序。

上传图片以及拖拽排序

weixin_47509924的博客 1809

YOLO系列算法改进 | C3k2改进篇 | 融合DFRL双融合注意力接收层 | 轻量化与全局感受野双突破,适应高分辨率航拍与密集小目标检测场景 | CVPR 2026

YOLO系列算法改进 | C3k2改进篇 | 融合DFRL双融合注意力接收层 | 轻量化与全局感受野双突破,适应高分辨率航拍与密集小目标检测场景 | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用C3k2_DFRL创新模块进行改进)

2502_91881744的博客 233

vue3项目中使用sortablejs实现图片拖拽排序

库初始化拖拽排序功能,使得图片和视频列表可以通过拖拽来重新排序。引入sortablejs。3、 钩子用于在组件挂载。后初始化拖拽排序功能。

jyl4855的博客 1020

使用Gitlab 搭建私有镜像仓库(外置Nginx)

为了让团队尽快使用Gitlab的CI进行工作,必须做好Gitlab的初始化工作,大家都知道拉取镜像由于某些原因,会比较慢,因此构建自己的私有镜像仓库就成为了关键的一步。当然私有镜像仓库的搭建有很多种方式,这里直接使用Gitlab提供的镜像仓库功能。一揽子解决方案比较香。gitlab真的越来越好用了,有了这个镜像仓,也没必要再使用三方的镜像仓库了。Devops 真好用!

网尘的技术专栏 1829

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

vue中使用vuedraggable实现图片的拖拽排序以及预览等功能

【代码】vue中使用vuedraggable实现图片的拖拽排序以及预览等功能。

dekuyu blog 3161

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

vue实现图片拖动排序

vue实现拖动图片排序

sinat_41200024的博客 2764

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vue3 图片放大缩小、拖拽功能(自定义指令)

const oDiv = el // 当前元素 const minTop = oDiv . getAttribute("drag-min-top") const ifMoveSizeArea = 20 oDiv . onmousedown =(e) => {

HHH917的博客 5762

vue后台Element-ui实现图片上传后拖拽排序

在组件下面先局部引入拖拽组件vuedraggable,import draggable from 'vuedraggable';3.定义组件接收参数,上传图最大值,宽,高,圆角,回显数组,然后监听当前数组值变化再传递给父组件。项目基于vue2,element2,vuedraggable2,话不多说直接开整。直接在项目components下面创建组件名为uploadImg。2.使用element的upload组件,创建mystyle对样式穿透动态修改。4.在父组件使用,按钮提交作校验成功拿到数组数据。

前端开发努力中! 2170

vue3 + Draggable 实现拖拽排序的最简单办法

vue3 setup语法使用vue draggable拖拽组件实现数组的排序功能

m0_64816413的博客 3788

Vue3 实现拖拽排序

Vue3 实现拖拽排序,话不多说,直接撸代码。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 5102

vue中实现拖拽排序

由于本次项目中需要实现首页模块拖拽的效果,通过比较vue项目中经常会提到的几种拖拽组件库来依次实现拖拽排序效果,并将使用的方式、效果进行比对,最终 vuedraggable 胜出,不愧为拖拽界的王者啊 !!!

yiyi_11的博客 2万+

vue3实现拖拽排序

核心就是 flex布局 的 order属性。

weixin_45730243的博客 934

vue elementui 实现图片上传后拖拽排序功能

vue elementui 实现图片上传后拖拽排序功能

qq_43248623的博客 1883

Vue3使用vue-draggable实现拖拽

最近在项目中遇到了图片拖拽改变位置,一、vue3.0安装vue-draggable二、在项目中引入三、在页面使用。

qq_25799227的博客 3304

vue中el-upload结合vuedraggable实现图片的上传、排序、删除以及预览等功能

【代码】vue中el-upload结合vuedraggable实现图片的上传、排序、删除以及预览等功能。

dekuyu blog 4159
上一篇: 修改elementUi中el-form表单某一个 label 的颜色样式
下一篇: vue使用炫酷字体-字体天下
核动力驴_
博客等级 码龄5年 54粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值