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

vue拖动排序,vue使用 HTML5 的draggable拖放 API实现内容拖并排序,并更新数组数据

vue拖动排序,vue使用 HTML5 的draggable拖放 API实现内容拖并排序,并更新数组数据

vue使用 HTML5 的draggable拖放 API实现内容拖并排序,并更新数组数据

  • 实现效果
  • 实现代码
    • 1.模板部分
    • 2. 添加拖拽相关方法
    • 3. 在 data 中添加拖拽状态变量
    • 4. 添加样式优化(可选)
  • 功能说明:

实现效果

HTML5 draggable拖拽API实现内容拖动排序

实现代码

1.模板部分

将你的循环部分修改为支持拖拽:

vue

<template><div v-for="(item, index) in imgs" :key="index":class="['text_pics_box_item']"draggable="true"@dragstart="dragStart($event, index)"@dragover.prevent@dragenter="dragEnter($event, index)"@drop="drop($event, index)"@dragend="dragEnd"@mouseover="hovervariableItem(index)" @mouseleave="unhovervariableItem"><div class="text_pics_box_item_img"><img  :src="item"></div></template>

2. 添加拖拽相关方法

在 methods 中添加以下方法:

methods: {// 拖拽开始dragStart(event, index) {event.dataTransfer.effectAllowed = 'move';event.dataTransfer.setData('text/plain', index);this.draggingIndex = index;// 添加拖拽样式event.target.style.opacity = '0.5';event.target.style.transform = 'scale(0.95)';},// 拖拽进入dragEnter(event, index) {event.preventDefault();if (this.draggingIndex !== index) {// 可以添加视觉反馈,比如高亮目标位置const targetElement = event.target.closest('.text_pics_box_item');if (targetElement) {targetElement.style.boxShadow = '0 0 0 2px #3855d5';}}},// 拖拽放置drop(event, index) {event.preventDefault();const draggedIndex = parseInt(event.dataTransfer.getData('text/plain'));if (draggedIndex !== index) {// 重新排列数组this.reorderImages(draggedIndex, index);}// 清除视觉反馈const targetElement = event.target.closest('.text_pics_box_item');if (targetElement) {targetElement.style.boxShadow = '';}},// 拖拽结束dragEnd(event) {// 恢复元素样式event.target.style.opacity = '';event.target.style.transform = '';// 清除所有元素的视觉反馈const items = document.querySelectorAll('.text_pics_box_item');items.forEach(item => {item.style.boxShadow = '';});this.draggingIndex = null;},// 重新排列图片数组reorderImages(fromIndex, toIndex) {const images = [...this.form.imgs];const [movedItem] = images.splice(fromIndex, 1);images.splice(toIndex, 0, movedItem);// 更新数组this.form.imgs = images;},
}

3. 在 data 中添加拖拽状态变量

data() {return {draggingIndex: null,  // 当前正在拖拽的元素索引}
}

4. 添加样式优化(可选)

<style> 部分添加一些拖拽相关的样式:

.text_pics_box_item {transition: all 0.2s ease;
}.text_pics_box_item.drag-over {border: 2px dashed #3855d5;background-color: rgba(56, 85, 213, 0.1);
}

功能说明:

draggable="true": 使元素可拖拽
@dragstart: 拖拽开始时记录被拖拽元素的索引
@dragover.prevent: 阻止默认行为,允许放置
@dragenter: 拖拽进入目标元素时的视觉反馈
@drop: 放置元素时重新排列数组
@dragend: 拖拽结束时清理样式

http://www.dtcms.com/a/352830.html

相关文章:

  • 【无标题】淘宝直播间详情数据
  • 云原生安全架构设计与零信任实践
  • 三格电子——高频一体式工业级RFID读写器的应用
  • 核心内涵解析:销采一体化 CRM 是什么?
  • 贴片式TE卡 +北京君正+Rk瑞芯微的应用
  • 亚马逊ASIN定投广告的智能化突破:从人工苦力到数据驱动的华丽转身
  • Part 1️⃣:相机几何与单视图几何-第六章:相机模型
  • Android中点击链接跳转到对应App页面的底层原理
  • Linux 云服务器日志清理自动化方法
  • 第二阶段Winfrom-8:特性和反射,加密和解密,单例模式
  • 点评项目(Redis中间件)第一部分Redis基础
  • golang 12 package 和 module
  • SegEarth-R1: Geospatial Pixel Reasoning via Large Language Model
  • week5-[字符数组]长度和
  • GraphRAG数据可视化
  • Java中JUnit知识点
  • Qt表格组件封装与远程数据库连接:从数据展示到交互体验
  • 阿里云——应用交付与负载均衡
  • 用户体验设计 | 从UX到AX:人工智能如何重构交互范式?
  • 阿里云轻量应用服务器与ECS对比
  • 4步用代码拆解数学建模中的TOPSIS评价决策! ! !
  • 树的常见算法及Java实现
  • LeetCode算法日记 - Day 23: 外观数列、数青蛙
  • 欧洲数字化养殖平台 Herdwatch 借力 Iceberg + StarRocks 提升分析能力
  • 【Matplotlib学习】驾驭画布:Matplotlib 布局方式从入门到精通完全指南
  • 【RabbitWQ】基于 Java 实现轻量级消息队列(二)
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(一)
  • 【重学 MySQL】九十、Linux下MySQL的安装与卸载指南
  • 如何保证DDC楼宇自控系统与IBMS集成管理系统的稳定性和可靠性?
  • 深入解析 Flink Function