draggable实现拖拽、禁止拖拽、拖拽后元素重新排序到指定位置

本文介绍了如何在Vue中实现拖拽功能,包括禁止拖拽以及拖拽后元素的重新排序。Vue作为轻量级的JavaScript框架,以其响应式数据绑定、组件化和插件系统等特性简化了应用开发。通过Vue.Draggable插件,可以方便地实现拖拽交互,增强用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

Vue是一种用于构建用户界面的JavaScript框架。它是一种轻量级的框架,旨在简化应用的开发过程。Vue提供了一种基于组件的开发模式,使开发者能够将应用程序分解为单个可复用的组件,并将这些组件组合起来以构建完整的应用程序。

Vue具有以下特点:

  1. 响应式:Vue使用了一种响应式的数据绑定机制,当数据发生变化时,相关的界面会自动更新。这极大地简化了状态管理和数据更新的过程。
  2. 组件化:Vue允许开发者将应用程序拆分为多个小组件,并通过组合这些组件来构建复杂的应用程序。每个组件都有自己的模板、样式和逻辑,使组件的复用和维护变得更加容易。
  3. 虚拟DOM:Vue使用了虚拟DOM来提高性能。当数据发生变化时,Vue会通过比较虚拟DOM的差异来更新实际的DOM,这样可以减少直接操作实际DOM带来的性能损耗。
  4. 插件系统:Vue具有丰富的插件系统,可以通过插件来扩展其功能。开发者可以使用现有的插件,或者根据自己的需求来开发自定义插件。
  5. 易于学习和使用:Vue的语法简洁明了,学习曲线较为平缓。它的文档也非常完善,提供了大量的示例和教程,帮助开发者迅速上手。
// 安装
npm install vuedraggable
// 引入
import draggable from 'vuedraggable'

二、实现拖拽

// 拖拽组件
<draggable
	class="components-draggable"
	:list="item.list"
	:group="{ name: 'componentsGroup'}"
	draggable=".components-list"
	:sort="false"
	:move="onMove"
	@end="onEnd"
>
	<li class="components-list" v-for="(item, index) in list" :key="index">
		<div class="components-body">{{item.label}}</div>
	</li>
</draggable>
// 数据
list: [
	{
		label: '组件1',
		value: 0
	},
	{
		label: '组件2',
		value: 1
	}
],
// 拖拽区域
<draggable :list="drawList" :animation="300" @end="onDrawEnd" group="componentsGroup"
	<li class="components-list" v-for="(item, index) in drawList" :key="index">
		<div class="components-body">{{item.label}}</div>
	</li>
</draggable>
// 数据
drawList: [],

三、禁止拖拽

// 拖拽时,校验是否已存在,禁止拖拽
onMove(e) {
	// 判断-是否已存在
  let arr = this.drawList.filter(item => {
    return item.value === 0
  })

  // 符合条件返回false,否则返回true
  if(e.draggedContext.element.value === 0 && arr.length){
  	return false
  }
  return true
}

四、拖拽后元素重新排序到指定位置

// 限制:【组件1】始终排列在第一位
onEnd(){
	for (var i = 0; i < this.drawList.length; i++) {
	  // 排序-组件1排第一位
	  if(this.drawList[i].value === 0 && i !== 0){
	  	this.drawList[0] = this.drawList.splice(i, 1, this.drawList[0])[0];
	  }
	}
}

五、相关文章

draggable的github地址
el-tabs事件绑定(Element UI)
Element UI resetFields与clearValidate方法
Vue resize监听窗口变化
vue监听滚动事件 实现某元素随着滚动条滚动固定距离顶部的某个位置(元素的top值实时变化)
Element-UI 日期选择器-时间范围控制
vue iframe 宽高自适应
Vue.Draggable使用文档总结
js 实现数组元素交换位置

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

·零落·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值