使用原生HTML的drag实现元素的拖拽

news2024/11/23 1:00:51

请添加图片描述

HTML 拖放Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能。例如,用户可使用鼠标选择可拖拽(draggable)元素,将元素拖拽到可放置(droppable)元素,并释放鼠标按钮以放置这些元素。拖拽操作期间,会有一个可拖拽元素的半透明快照跟随着鼠标指针。🔍MDN: HTML 拖放 API

1.draggable 属性:设置元素可以拖拽。true 表示元素可以被拖动,false 表示元素不可以被拖动。

注意:像 <img draggable> 这样的简写是不允许的。正确的用法是 <img draggable="true">

2.@dragstart:在拖拽开始时,将当前拖拽项的索引存储到 draggedIndex,并设置拖拽光标的效果为 move。更新 draggedIndex 实现拖拽过程中的预览。

3.@dragover.prevent:当拖拽项经过其他项时,通过 splice 方法将当前拖拽项临时移除并插入到新的位置。

4.@drop:当拖拽放置完成时,draggedIndex 被重置,以防止任何临时变化影响最终顺序。

案例代码:
请添加图片描述

<template>
  <div class="drag-container">
    <div
      v-for="(item, index) in items"
      :key="item.id"
      class="draggable-item"
      draggable="true"
      :class="{ selected: index === draggedIndex }"
      @dragstart="onDragStart($event, index)"
      @dragover.prevent="onDragOver(index)"
      @drop="onDrop(index)"
    >
      {{ item.name }}
    </div>
  </div>
</template>

<script setup>
import { ref } from "vue";

// 定义拖拽的数据
const items = ref([
  { id: 1, name: "项 1" },
  { id: 2, name: "项 2" },
  { id: 3, name: "项 3" },
  { id: 4, name: "项 4" },
]);

// 用于存储当前被拖拽的元素的索引
const draggedIndex = ref(null);

// 拖拽开始事件
const onDragStart = (event, index) => {
  draggedIndex.value = index;
  //   设置拖拽光标效果
  event.dataTransfer.effectAllowed = "move";
  console.log(`开始拖拽: ${items.value[index].name}`);
};

// 拖拽经过目标时,临时预览排序效果
const onDragOver = (index) => {
  if (draggedIndex.value !== null && draggedIndex.value !== index) {
    //用 splice 方法将拖拽的项从原来的位置移除,并插入到新的位置
    const draggedItem = items.value.splice(draggedIndex.value, 1)[0];
    // 将 draggedItem 插入到 items 数组的 index 位置,从而实现排序的效果。
    items.value.splice(index, 0, draggedItem);
    // 更新 draggedIndex 以匹配新的位置
    draggedIndex.value = index;
  }
};

// 拖拽放置事件
const onDrop = (index) => {
  // 拖拽完成后将索引重置
  draggedIndex.value = null;
  console.log(`放置到: ${items.value[index].name}`);
};
</script>

<style scoped>
.drag-container {
  margin-left: 30px;
  width: 100px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-top: 20px;
}

.draggable-item {
  padding: 10px;
  background-color: #4caf50;
  color: white;
  cursor: grab;
  text-align: center;
}
/* 选中的拖拽项样式 */
.selected {
  border: 2px dashed #ff9800;
}
</style>

在vue中还可以使用第三方库vuedraggable 来实现拖拽:🔍vue3使用vuedraggable实现拖拽(有过渡)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128089.html

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

相关文章

GPIO 简介(STM32F407)

一、GPIO简介 什么是GPIO GPIO即通用输入输出端口&#xff0c;全称General Purpose Input Output&#xff0c;是控制或者采集外部器件的信息的外设&#xff0c;即负责输入输出。 它按组分配存在&#xff0c;每组最多16个IO口&#xff0c;组数视芯片而定。比如STM32F407ZGT6是…

今年中秋节买什么东西划算?精选五款好物清单合集推荐!

谈及中秋佳节选购什么好物&#xff0c;你可真是找对人了&#xff01;作为一位专注于节日氛围与生活美学的博主&#xff0c;对于哪些中秋好物能为您的佳节增添温馨与喜悦&#xff0c;我可是了如指掌。恰逢中秋佳节临近&#xff0c;各大商家纷纷推出精彩纷呈的优惠活动&#xff0…

AI产品经理必备技能:技术与能力升级图谱

目 录 CONTENTS 前言 第1章 AI产品经理——不是简单的“当产品经理遇上“AI” 001 1.1 三大浪潮看AI技术发展 002 1.2 AI产品和AI产品经理 003 1.3 成为AI产品经理三步走 011 1.3.1 第一步&#xff1a;找到自己的糖山 011 1.3.2 第二步&#xff1a;找到自己的比较优势 …

联合谱低秩先验和深度空间先验的高光谱图像无监督去噪

高光谱图像&#xff08;Hyperspectral Image, HSI&#xff09;具有丰富的光谱信息&#xff0c;广泛应用于遥感、环境监测和医学成像等领域。然而&#xff0c;高光谱图像常常受到噪声的干扰&#xff0c;这会影响后续的数据分析和应用。因此&#xff0c;设计有效的去噪算法是高光…

计算机毕业设计选题推荐-线上花店系统-鲜花配送系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

玩归龙潮手机配置低、卡顿发烫、内存不足 GameViewer远程助你手机畅玩归龙潮

国潮RPG动作游戏《归龙潮》终于在9月13日迎来公测&#xff01;要是你担心自己的手机配置低&#xff0c;会出现卡顿发烫、内存不足等问题&#xff0c;可以通过网易GameViewer远程助你手机远控电脑畅玩归龙潮。 GameViewer远程作为专为游戏玩家打造的远程控制软件&#xff0c;用它…

价值流:从理论框架到实践落地的系统化指南

价值流如何从理论转化为实践中的企业增长引擎 随着全球化和数字化进程的加快&#xff0c;企业面临的竞争压力日益加剧。如何在竞争激烈的市场中立足并实现持续增长&#xff0c;已经成为每一个企业管理者需要面对的重要议题。作为一种强调客户价值创造的工具&#xff0c;《价值…

2024年8月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2024年8月国产数据库大事件和重要产品发布消息。 目录 2024年8月国产数据库大事记 TOP102024年8月国产数据库大事记&#xff08;时间线&#xff09;产品/版本发布兼容认证代表厂商大事记厂商活动 【VLDB2024分享和相关论文】其它活动相关资料 厂商财报…

【STM32】OLED

OLED显示原理 OLED使用的是I2C协议&#xff0c;使用ssd1306芯片对所有灯进行控制&#xff0c;如果一个灯需要一个引脚的话&#xff0c;屏幕分为8页&#xff0c;每页有128列&#xff0c;8行 . 共有128* 88个灯 这样引脚是算不过来的&#xff0c;所以我们使用了ssd1306芯片&…

C/C++语言基础--预编译指令、宏定义(带参宏、宏函数)、头文件重复包含解决方法等

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 宏定义是C/C最伟大的发明之一&#xff0c;甚至有人认为他比指针还伟大&#xff0c;它能够极大简化代码&#xff0c;因此学习宏定义是非常有必要的但是由于他只是简单的替换&#xff0c;故在C的efficiency书籍中…

说话人脸生成

说话人脸生成是一种技术&#xff0c;它通过音频信号来驱动和合成视频中的人脸图像&#xff0c;使得人脸的口型和表情与音频中的声音同步。这种技术主要应用于视频制作、虚拟现实、动画电影等领域&#xff0c;能够提升视听媒体的自然性和沉浸感。 使用的技术 说话人脸生成通常…

跨界融合:EasyDSS+无人机视频直播推流技术助力行业多场景应用

随着科技的飞速发展&#xff0c;无人机技术与流媒体技术的结合正逐步改变着多个行业的运作模式。其中&#xff0c;EasyDSS互联网视频云服务与无人机视频直播推流技术的结合&#xff0c;更是为警务安防、赛事直播、农业监测等多个领域带来了前所未有的变革。本文将深入探讨EasyD…

数据结构C //线性表(链表)ADT结构及相关函数

数据结构&#xff08;C语言版&#xff09;严蔚敏 吴伟民 线性表&#xff08;链表&#xff09;ADT结构及相关函数 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块&#xff08;头文件&#xff0c;函数文件&#xff0c;主文件&…

全球公认最厉害思想家颜廷利谈野鸡扮凤、犬饰猛虎和地蛇慕龙

在现代社会&#xff0c;我们依然能够看到许多“野鸡扮凤”、“犬饰猛虎”和“地蛇慕龙”这样的故事上演。这些故事背后&#xff0c;往往隐藏着对名誉、地位和权力的渴望&#xff0c;以及为了达到目的而不择手段的行为。 最近&#xff0c;宁夏银川的杨韶山就成为了这样一个故事…

GaussDB关键技术原理:高弹性(四)

书接上文GaussDB关键技术原理&#xff1a;高弹性&#xff08;三&#xff09;从段页式技术方面对GaussDB高弹性能力进行了解读&#xff0c;本篇将从hashbucket扩容方面继续介绍GaussDB高弹性技术。 4 hashbucket扩容 基于hashbucket表的扩容整体流程主要包含三个步骤&#xff…

【网络安全】-文件下载漏洞-pikachu

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录  前言 什么是文件下载漏洞&#xff1f; 1.常见形式&#xff1a; 常见链接形式&#xff1a; 常见参数&#xff1a; 2.利用方式&#xff1a; 3.举例&#xff1a;pikachu不安全的文件…

大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例

Flink SQL Flink SQL 是 Apache Flink 提供的一种高层次的查询语言接口&#xff0c;它基于 SQL 标准&#xff0c;为开发者提供了处理流式数据和批处理数据的能力。Flink SQL 允许用户使用标准 SQL 查询语言在数据流和数据表上执行复杂的操作&#xff0c;适用于多种应用场景&am…

如何模拟一个小程序项目打包的流程

一、Uni-app 执行 yarn run dev:mp-weixin后会发生什么 &#xff08;一&#xff09;准备工作 克隆项目&#xff1a;创建以 typescript 开发的工程&#xff08;如命令行创建失败&#xff0c;请直接访问 https://gitee.com/dcloud/uni-preset-vue/repository/archive/vite-ts.z…

htop、free -h对于可用内存显示不同的区别

htop中Mem包含了缓存和缓存区&#xff0c; free -h查看 used free buff/cache 上面htop显示的mem&#xff0c; 1、我看我还能用多少内存&#xff0c;看哪里 看free -h 中的free 2、buff/cache 是啥 缓存缓存区占用&#xff0c;htop显示的效果是把这个也算在一块了&#…

C# WinForm:禁用Panel容器滚动条自动移动位置的功能

1.在WinForm项目中新建一个类&#xff1a; 2.类里面的内容&#xff0c;重写Panel的这个方法 3.编译后这个控件就出现在工具箱了 4.然后用这个新Panel控件就好了 5.完事大吉。