vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序

yizhihongxing

下面是实现"vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序"的完整攻略。

1. 确保已安装vuedraggble插件

在开始实现之前,你需要先在你的项目中安装vuedraggable插件。你可以通过以下命令来安装:

npm install vuedraggable --save

2. 使用vuedraggable组件

在你的Vue组件模板中,你需要使用vuedraggable组件创建可拖拽的组件列表。

<template>
  <vuedraggable v-model="items">
    <div v-for="item in items" :key="item.id" class="item">
      {{ item.name }}
    </div>
  </vuedraggable>
</template>

3. 配置vuedraggable组件的API options

vuedraggable组件提供了多个可配置的API options来实现不同的功能。针对我们需要的盒子之间相互拖拽排序,我们需要使用两个API options,分别是group和move方法:

3.1 group

通过group API option,我们可以为不同的拖拽元素指定相同的组,使它们之间可以相互拖拽。

<template>
  <vuedraggable v-model="items" :group="{ name: 'box' }">
    <div v-for="item in items" :key="item.id" class="item">
      {{ item.name }}
    </div>
  </vuedraggable>
</template>

3.2 move方法

通过move方法 API option,我们可以自定义拖拽元素的移动方式,使它们之间可以相互拖拽并排序。

<template>
  <vuedraggable v-model="items" :group="{ name: 'box' }" :move="onMove">
    <div v-for="item in items" :key="item.id" class="item">
      {{ item.name }}
    </div>
  </vuedraggable>
</template>

<script>
export default {
  data() {
    return {
      items: [
        {
          id: 1,
          name: '盒子1'
        },
        {
          id: 2,
          name: '盒子2'
        },
        {
          id: 3,
          name: '盒子3'
        },
        {
          id: 4,
          name: '盒子4'
        }
      ]
    }
  },
  methods: {
    onMove(evt, originalEvent) {
      // 通过evt的draggedContext和relatedContext获取拖拽元素和目标元素的位置,需要返回一个布尔值表示是否允许拖拽
      console.log(evt.draggedContext.index, evt.relatedContext.index)
      return true
    }
  }
}
</script>

示例说明

示例1

下面是一个完整的例子,实现了多个组件之间的相互拖拽排序:

<template>
  <div class="app">
    <div class="box-container">
      <h2>盒子列表</h2>
      <vuedraggable v-model="boxes" :group="{ name: 'box' }" :move="onMove">
        <div v-for="box in boxes" :key="box.id" class="box">
          {{ box.name }}
        </div>
      </vuedraggable>
    </div>
    <div class="item-container">
      <h2>物品列表</h2>
      <vuedraggable v-model="items" :group="{ name: 'box' }">
        <div v-for="item in items" :key="item.id" class="item">
          {{ item.name }}
        </div>
      </vuedraggable>
    </div>
  </div>
</template>

<style>
.box-container {
  float: left;
  width: 50%;
}

.item-container {
  float: left;
  width: 50%;
}

.box {
  border: 1px solid #ddd;
  border-radius: 5px;
  background-color: #f1f1f1;
  margin: 5px;
  padding: 10px;
}

.item {
  border: 1px solid #ccc;
  border-radius: 5px;
  background-color: #fff;
  margin: 5px;
  padding: 10px;
}
</style>

<script>
import draggable from 'vuedraggable'

export default {
  components: {
    draggable
  },
  data() {
    return {
      boxes: [
        {
          id: 1,
          name: '盒子1'
        },
        {
          id: 2,
          name: '盒子2'
        },
        {
          id: 3,
          name: '盒子3'
        }
      ],
      items: [
        {
          id: 1,
          name: '物品1'
        },
        {
          id: 2,
          name: '物品2'
        },
        {
          id: 3,
          name: '物品3'
        },
        {
          id: 4,
          name: '物品4'
        },
        {
          id: 5,
          name: '物品5'
        }
      ]
    }
  },
  methods: {
    onMove(evt, originalEvent) {
      // 通过evt的draggedContext和relatedContext获取拖拽元素和目标元素的位置,需要返回一个布尔值表示是否允许拖拽
      console.log(evt.draggedContext.index, evt.relatedContext.index)
      return true
    }
  }
}
</script>

示例2

下面是一个简单的例子,实现了两个盒子之间的相互拖拽:

<template>
  <div class="app">
    <h2>盒子1</h2>
    <vuedraggable v-model="box1" :group="{ name: 'box' }" :move="onMove"></vuedraggable>
    <h2>盒子2</h2>
    <vuedraggable v-model="box2" :group="{ name: 'box' }" :move="onMove"></vuedraggable>
  </div>
</template>

<style>
.app {
  margin: 20px;
}

.vuedraggable-dragging {
  opacity: 0.5;
}
</style>

<script>
import draggable from 'vuedraggable'

export default {
  components: {
    draggable
  },
  data() {
    return {
      box1: [
        {
          id: 1,
          name: '物品1'
        },
        {
          id: 2,
          name: '物品2'
        },
        {
          id: 3,
          name: '物品3'
        }
      ],
      box2: [
        {
          id: 4,
          name: '物品4'
        },
        {
          id: 5,
          name: '物品5'
        }
      ]
    }
  },
  methods: {
    onMove(evt, originalEvent) {
      // 通过evt的draggedContext和relatedContext获取拖拽元素和目标元素的位置,需要返回一个布尔值表示是否允许拖拽
      console.log(evt.draggedContext.index, evt.relatedContext.index)
      return true
    }
  }
}
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Springboot-admin整合Quartz实现动态管理定时任务的过程详解

    下面就针对“Springboot-admin整合Quartz实现动态管理定时任务的过程详解”进行详细讲解。 一、背景介绍 在实际的开发过程中,定时任务的使用频率非常高。而对于Spring Boot项目来说,使用Quartz框架来实现定时任务是一种常见的做法。但是,随着业务的不断发展,我们的定时任务往往需要频繁地进行修改和管理,此时我们可以借助Springbo…

    Vue 2023年5月28日
    00
  • Vue数组的劫持逐步分析讲解

    Vue数组的劫持是Vue.js框架的核心功能之一,它通过监测数组的变化,实现了数据更新与视图更新的自动同步。下面我们将从以下几个方面逐步分析Vue数组的劫持原理。 劫持原理 当使用Vue.js框架时,我们通常会使用Vue的实例对数据进行绑定。例如: var vm = new Vue({ el: ‘#app’, data: { list: [1, 2, 3] …

    Vue 2023年5月28日
    00
  • 详解vue移动端日期选择组件

    让我详细讲解一下“详解Vue移动端日期选择组件”的完整攻略。 标题1 标题2 标题3 首先,这篇攻略将详细介绍如何使用Vue框架开发移动端日期选择组件,并且会包含至少两个示例说明。下面就让我们开始吧。 组件的功能需求 在开始编写组件之前,我们需要先定义组件的功能需求,以便于后续在设计中进行调整。 支持用户选择年份、月份和日期。 根据年份和月份计算当月天数。 …

    Vue 2023年5月28日
    00
  • vue中v-for 循环对象中的属性

    当你需要在Vue中使用v-for指令循环一个列表时,有时可能需要访问遍历对象中的属性。以下是一个基本的示例: <ul> <li v-for="item in items">{{ item }}</li> </ul> 在上面的示例中,我们访问了items列表中的每个元素,并将它们渲染为一个li…

    Vue 2023年5月28日
    00
  • 基于vue-draggable 实现三级拖动排序效果

    当我们需要实现在前端页面中完成三级拖动排序效果的时候,可以使用vue-draggable组件来完成。具体实现步骤如下: 步骤一:安装vue-draggable 首先要安装vue-draggable组件: npm install vuedraggable 步骤二:定义基本结构 在Vue组件中,我们需要定义一些基本的结构,包括三个列表,两个按钮等。可以参考以下代…

    Vue 2023年5月27日
    00
  • 利用vue.js把静态json绑定bootstrap的table方法

    让我来详细讲解如何利用vue.js把静态json绑定bootstrap的table方法。 1. 引入依赖资源 首先,我们需要在HTML文件中引入所需的依赖资源,包括: <!– 引入Vue.js –> <script src="https://cdn.jsdelivr.net/npm/vue@3.0.0/dist/vue.esm…

    Vue 2023年5月28日
    00
  • 学习 Vue.js 遇到的那些坑

    学习Vue.js遇到的坑可以总结为以下几点: 1. 环境搭建 Vue.js是基于Vue-cli脚手架搭建的,我们需要先安装Node.js和npm,然后通过npm安装Vue-cli。在使用Vue-cli创建项目时,需要选择不同的模板,如Webpack、Browserify等。选择合适的模板会影响到后续的开发和打包。 示例: 安装Vue-cli命令: npm i…

    Vue 2023年5月28日
    00
  • vue项目刷新当前页面的三种方式(重载当前页面数据)

    有关Vue项目刷新当前页面的三种方式,可以从以下三个方面展开说明: 1. 利用location.reload()方法进行页面刷新 在Vue中,可以通过调用浏览器原生的location.reload()方法来实现页面刷新。该方法会重新加载当前页面,重新发起一次网络请求,对页面元素进行重绘,因此能够实现重载当前页面数据的目的。可以在Vue组件中定义一个方法,通过…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部