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.pswp.cn/diannao/97419.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行内元素块元素

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>显示例子</title><style>/* 将行内元素…

算法---动态规划(持续更新学习)

1.动态规划的经典问题 &#xff08;1&#xff09;动规基础&#xff1a;爬楼梯、斐波那契数列 &#xff08;2&#xff09;背包问题&#xff1a;0-1背包&#xff0c;多重背包 &#xff08;3&#xff09;打家劫舍 &#xff08;4&#xff09;股票问题 &#xff08;5&#xff09;子序…

迅睿CMS自定义网站表单:HTML方式调用Select下拉选项数据指南

在迅睿CMS中&#xff0c;当我们需要自定义网站表单并希望以HTML方式调用select下拉选项数据时&#xff08;而非使用系统默认的{$myfield}、{$diyfield}或{$sysfield}模板变量&#xff09;&#xff0c;可以采用以下方法实现。 问题背景 默认情况下&#xff0c;迅睿CMS表单字段通…

k8s--efk日志收集

目录 环境准备 下载efk软件包 下载 nfs 设置nfs开机自启 创建共享存储目录 配置共享目录文件 加载nfs 使共享目录生效 查看 node节点验证 共享目录配置成功 进入efk配置文件目录 修改deployment.yaml文件 修改为master主节点ip 修改为nfs共享存储目录 修改 kibana …

数值分析——算法的稳定性

由于计算时&#xff0c;误差会有累积&#xff0c;如果是长时间的计算&#xff0c;就会影响最后得到的结果&#xff0c;因此&#xff0c;需要分析一下误差的影响能否控制&#xff0c;由此就引出了算法的稳定性 数值的稳定性 对于某一种算法&#xff0c;如果初始值有很小的误差&a…

解密 Kotlin 中的隐藏调度器:Dispatchers.Main.immediate

在日常的 Android 开发中&#xff0c;我们经常使用协程来处理异步任务。你可能已经熟悉了 Dispatchers.Main、Dispatchers.IO 和 Dispatchers.Default&#xff0c;但今天我要介绍一个不太为人知却极其有用的调度器&#xff1a;Dispatchers.Main.immediate。 一个令人困惑的现象…

I2C多点触控驱动开发详解

I2C多点触控驱动开发详解 1. 多点触控技术概述 1.1 触控技术发展历程 触控技术作为人机交互的重要方式&#xff0c;经历了从单点触控到多点触控的演进过程。早期的电阻式触控屏只能实现单点触控&#xff0c;限制了用户体验。随着电容式触控技术的发展&#xff0c;多点触控成为可…

UE5提升分辨率和帧率的方法

提问&#xff1a;分辨率大概理解就是是否模糊&#xff0c;帧率大概理解就是是否卡顿对吗 回答 没错&#xff0c;一句话总结&#xff1a; 分辨率主要影响“看起来糊不糊”&#xff1b; 帧率与帧时间稳定性主要影响“顺不顺”。 如何快速提升UE5的分辨率&#xff1f; 是的&…

小狼毫输入法中让数字键盘上的数字键不再选择候选词而是与原始输入一起直接上屏

使用搜狗输入法的双拼时&#xff0c;输入“womf”然后按下主键盘上的数字1&#xff0c;会选择排名第一的候选词上屏&#xff08;大概率是“我们&#xff09;&#xff0c;输入“womf”然后按下数字键盘上的数字1&#xff0c;不会选择候选词&#xff0c;而是将输入文本变成“womf…

【C++】类和对象(终章)

作者主页&#xff1a;lightqjx 本文专栏&#xff1a;C 目录 一、构造函数 1. 构造函数体赋值 2. 初始化列表 &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;使用特性 3. explicit关键字 二、static成员 1. 概念 2. 特性 3. 应用 三、友元 1. 友元函…

水果目标检测[2]:ALAD-YOLO:一种轻便、精确的苹果叶病检测仪

原文&#xff1a; 目录 摘要&#xff1a; ALAD-YOLO的改进&#xff1a; 1.轻量化主干网络&#xff1a; 2.改进的 Neck 网络&#xff1a; 3.改进的 SPP 模块&#xff1a; 4.注意力机制引入&#xff1a; 实验结果 数据&#xff1a; 1 数据采集 (Data Collection) 2 数…

Let‘s Encrypt证书自动续期

证书失效后浏览器可以看到错误提示&#xff0c;以及证书过期时间。 排查服务器证书续期配置 1. 证书未正确安装或配置 确保在阿里云服务器上部署的 Let’s Encrypt 证书已经正确安装。你可以通过以下步骤确认&#xff1a; 使用命令 sudo certbot certificates 检查证书是否正确…

Redis-基数统计、位图、位域、流

Redis-基数统计、位图、位域、流一、基数统计 HyperLogLog二、位图 Bitmap三、位域 Bitfild四、流 Stream一、基数统计 HyperLogLog 基数统计:是用来做基数(不重复的数)统计的算法 &#xff08;统计不重复出现的数据的个数&#xff09; 基数统计VS集合 集合&#xff1a; uv …

IBMS-建筑内分散的子系统(如 BA、安防、消防、能源、电梯等)进行数据互联、功能协同与智能管控

IBMS&#xff08;Integrated Building Management System&#xff0c;楼宇集成管理系统&#xff09;并非简单的 “系统叠加”&#xff0c;而是通过对建筑内分散的子系统&#xff08;如 BA、安防、消防、能源、电梯等&#xff09;进行数据互联、功能协同与智能管控&#xff0c;实…

LabVIEW温采监控系统

​温度采集监控系统以LabVIEW 软件平台&#xff0c;构建起一套高效、可靠的温度监测与控制体系。系统可实时采集、显示、存储温度数据&#xff0c;超限时自动报警并执行温控操作&#xff0c;适用于多类场景&#xff0c;能满足精准温控需求&#xff0c;解决传统系统灵活性差、成…

Docker核心概念与镜像仓库操作指南

文章目录一、名词概念Docker镜像Docker镜像仓库二、Docker镜像仓库常用命令三、容器启动相关指令Nginxdocker rundocker ps四、综合实例1.搭建Nginx服务2.Docker hub上创建私有仓库一、名词概念 Docker镜像 Docker 镜像&#xff1a;是一个只读的模板&#xff0c;它包含了创建…

科技信息差(8.30)

&#x1f30d;DeepSeek V3.1 Base突袭上线&#xff01;击败Claude 4编程爆表&#xff0c;全网在蹲R2和V4&#x1f384;语音界Sora&#xff01;微软刚开源新模型&#xff0c;一次生成90分钟语音、3200倍压缩率VibeVoice-1.5B开创了语音界多个重大技术突破&#xff1a;一次性可连…

【国内电子数据取证厂商龙信科技】ES 数据库重建

我们公司在协助侦办一起案件现场勘查遇到这样一个案件&#xff0c;现场没有 获取到服务器数据库密码&#xff0c;且涉案服务器数据巨大&#xff0c;涉及到的数据库并不 是 mysql 数据库&#xff0c;而是 elasticsarch 数据库&#xff0c;这给我们侦办案件带来了极 大的困难&…

【51单片机定时1秒中断控制流水灯方向】2022-11-14

缘由C语言怎么编可中断取反流水灯-编程语言-CSDN问答 用P1口做输出口&#xff0c;接八只发光二极管。编写程序&#xff0c;使发光二极管循环点亮&#xff0c;循环点亮时间间隔为1秒&#xff0c;该时间间隔用定时器中断实现。/ INT0 接单次脉冲输出&#xff0c;每当有外部中断信…

Megatron-LM(模型并行)

Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism 1. 技术设计原则 Megatron-LM 提出轻量级层内模型并行&#xff0c;无需定制编译器或修改框架&#xff0c;仅通过在 PyTorch 原生代码中插入少量通信操作&#xff08;如all-reduce&…