vue3拖拽排序 使用 vuedraggable

vue.draggable.next vue3 拖拽排序

vue.draggable.next

下载

js 复制代码
pnpm add vuedraggable@next

使用

js 复制代码
<script lang="ts" setup>
import { reactive } from "vue";
import draggable from "vuedraggable";

const list = reactive([
	{
		id: 1,
		name: "zs",
	},
	{
		id: 2,
		name: "ls",
	},
	{
		id: 3,
		name: "xr",
	},
]);
</script>

<template>
	<draggable :list="list" item-key="id">
		<template #item="{ element }">
			<div>{{ element.name }}</div>
		</template>
	</draggable>
</template>

<style lang="scss" scoped></style>

slot 其他插槽

Header/Footer

可用作图片上传的按钮,保持在同一行

js 复制代码
<template>
	<draggable :list="list" item-key="id">
      <template #header>
         <button>Add</button>
      </template>

		<template #item="{ element }">
			<div>{{ element.name }}</div>
		</template>

      <template #Footer>
         <button>Add</button>
      </template>
	</draggable>
</template>

handle 手柄,指定某一元素可拖拽

js 复制代码
<template>
	<draggable :list="myArray" item-key="id" handle=".handle">
		<template #item="{ element, index }">
			<div>
				<span class="handle">点我拖动</span>
				<span class="px-20px">{{ element.name }}</span>
				<span @click="handleDelete(index)">X</span>
			</div>
		</template>
	</draggable>
</template>

animation 拖拽动画时长

js 复制代码
<template>
	<draggable :list="myArray" item-key="id" :animation="2000">
		<template #item="{ element }">
			<div>{{ element.name }}</div>
		</template>
	</draggable>
</template>

change 事件

js 复制代码
<script lang="ts" setup>
import { reactive } from "vue";
import draggable from "vuedraggable";
interface List {
	id: number;
	name: string;
}
const list: List[] = reactive([
	{
		id: 1,
		name: "zs",
	},
	{
		id: 2,
		name: "ls",
	},
	{
		id: 3,
		name: "xr",
	},
]);

function onChange(e: { moved: { element: List; newIndex: number; oldIndex: number } }) {
	console.log("拖拽元素", e.moved.element);
	console.log("拖拽元素后索引", e.moved.newIndex);
	console.log("拖拽元素前索引", e.moved.oldIndex);
}
</script>

<template>
	<draggable :list="list" item-key="id" @change="onChange">
		<template #item="{ element }">
			<div>{{ element.name }}</div>
		</template>
	</draggable>
</template>

<style lang="scss" scoped></style>
相关推荐
我在北京coding29 分钟前
TypeError: Cannot read properties of undefined (reading ‘queryComponents‘)
前端·javascript·vue.js
海天胜景1 小时前
vue3 获取选中的el-table行数据
javascript·vue.js·elementui
翻滚吧键盘2 小时前
vue绑定一个返回对象的计算属性
前端·javascript·vue.js
苦夏木禾2 小时前
js请求避免缓存的三种方式
开发语言·javascript·缓存
超级土豆粉2 小时前
Turndown.js: 优雅地将 HTML 转换为 Markdown
开发语言·javascript·html
乆夨(jiuze)2 小时前
记录H5内嵌到flutter App的一个问题,引发后面使用fastClick,引发后面input输入框单击无效问题。。。
前端·javascript·vue.js
小彭努力中3 小时前
141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
前端·javascript·vue.js·交互
小飞悟3 小时前
前端高手才知道的秘密:Blob 居然这么强大!
前端·javascript·html
code_YuJun3 小时前
Promise 基础使用
前端·javascript·promise
Codebee3 小时前
OneCode自主UI设计体系:架构解析与核心实现
前端·javascript·前端框架