vue+vuedraggable 实现文字/按钮/div拖拽组件详解

先看成果:(样式业务简陋请见谅!)

如图:左侧按钮/div/span/拖拽到右侧生成组件,右侧组件之间也可以互相碰撞替换;

左右都是数组,拖拽的过程相当于两个数组数据的迁移

本功能使用得draggable插件,参数配置请跳转查看!

下面开始分享实现过程:

1、下载draggable  

npm install vuedraggable --save

2、引入 draggable

import draggable from 'vuedraggable'
// 注册
components: { draggable }

3、 左侧代码实现

<draggable
  v-model="dragNode"
  tag="ul"
  v-bind="{
    group: { name: 'people', pull: 'clone', put: false },
    sort: false,
    animation: 0,
    filter: '.undraggable'
  }"
>
  // 循环生成按钮
  <button 
    v-for="(component,index) in dragNode" 
    :key="index" 
    class="btn-grad-03"
  >
    {{ component.title }}
  </button>
</draggable>

js逻辑部分

// 三个测试基础组件(实际开发可替换成自己的业务)
import component1 from './component1'
import component2 from './component2'
import component3 from './component3'

components: {
 component1,
 component2,
 component3
},

// 左侧组件名称列表
dragNode: [{
  name: 'component1',
  title: '文字组件'
}, {
  name: 'component2',
  title: '表格组件'
}, {
  name: 'component3',
  title: '环形进度条'
}]

4、右侧代码实现

<draggable
  v-model="dragData"
  style="width: 100%;height: 100%;"
  v-bind="{group: 'people',animation: 300}"
>
  <el-col 
    v-for="(item, index) in dragData" 
    :key="index" 
    :span="12" 
    style="margin-bottom: 30px;"
  >
    <div class="drag-content">
      // 关闭组件
      <i class="el-icon-close close-icon" @click="handleCloseComponent(index)" />
      <div>{{ item.title }}</div>
      // 循环生成动态组件 :is
      <component :is="item.name" class="mt" />
    </div>
  </el-col>
</draggable>

data 

// 拖拽后的数据
dragData: [],

methods

// 删除关闭组件(删除数据)
handleCloseComponent(index) {
 this.dragData.splice(index, 1)
};

以上就是该功能的具体实现,有需要的小伙伴可以借鉴;


这种扩展性很高;

1、做过表单设计器,首页完全拖拽布局,生成json存储的数据库,根据json回显渲染页面,实现个性化首页(左侧组件名、中间容器、右侧数据样式设置)

2、做过大屏幕模块定制化,不同人员可设置不同右侧组件布局

也可以使用多列拖拽容器等

因效果设计公司业务。暂不展示


ps:如果内容对大家有帮助的话,不要吝啬你的小手,点赞支持支持博主

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vue3和Vue2一样都可以使用vuedraggable插件进行不同组件拖拽。以下是使用vuedraggable插件实现不同组件拖拽的步骤: 1. 安装vuedraggable插件 在终端中执行以下命令: ``` npm install vuedraggable ``` 2. 引入vuedraggable插件 在需要使用vuedraggable插件的组件中引入: ```javascript import draggable from 'vuedraggable' ``` 3. 使用draggable组件 在模板中使用draggable组件,并设置相应的属性: ```html <draggable v-model="list" :element="'ul'" :options="{group:'items'}"> <li v-for="(item, index) in list" :key="item.id">{{ item.name }}</li> </draggable> ``` 其中,v-model绑定了一个数组list,用于记录拖拽后的顺序;:element指定了拖拽的元素类型,这里为ul;:options指定了拖拽的选项,这里设置了group为items,表示不同的组件可以互相拖拽。 注意:v-model绑定的数组中的元素必须要有一个唯一的标识符,用于区分不同的元素。 4. 处理拖拽事件 当拖拽完成后,可以通过监听dragend事件来处理拖拽后的逻辑: ```html <draggable v-model="list" :element="'ul'" :options="{group:'items'}" @dragend="onDragEnd"> <li v-for="(item, index) in list" :key="item.id">{{ item.name }}</li> </draggable> ``` ```javascript methods: { onDragEnd(event) { console.log(event) // 处理拖拽完成后的逻辑 } } ``` 在onDragEnd方法中,可以获取到拖拽完成后的事件对象,通过事件对象可以获取到拖拽前后的元素顺序,从而进行相应的操作。 以上就是使用vuedraggable插件实现不同组件拖拽的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值