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

下面是实现"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日

相关文章

  • vue使用vite配置跨域以及环境配置详解

    Vue使用Vite配置跨域以及环境配置详解 在Vue应用中,我们经常会遇到需要跨域请求接口的场景。同时,在不同的环境中,还需要配置不同的API地址。为了解决这些问题,我们可以使用Vite构建工具,并通过Vite提供的配置来实现跨域和环境配置。 跨域配置 在Vite中,我们可以通过proxy来实现跨域请求。首先,在项目根目录下创建vite.config.js文…

    Vue 2023年5月28日
    00
  • ionic cordova一次上传多张图片(类似input file提交表单)的实现方法

    一、背景 在移动端开发中,经常会遇到需要上传多张图片的需求,例如上传头像、相册、动态图片等。Ionic是一个基于AngularJS和Cordova的开发框架,提供了丰富的插件和能力,可以便捷地实现这类功能。 二、实现思路 实现多张图片上传的关键在于,需要通过Cordova的File Transfer插件将多张图片上传到服务器。因为Cordova File插件…

    Vue 2023年5月28日
    00
  • c4d预览很卡怎么办? c4d从软硬件解决预览卡的方法

    C4D预览很卡的问题在使用中很常见,我们可以从软硬件两个方面入手,从而解决预览卡的问题。下面我们分别来讲解。 从软件上解决C4D预览卡的问题 1. 降低渲染设置 C4D的预览设置一般都是默认情况下的,适合较小的场景、较简单的模型。对于较为复杂的场景或者模型,预览卡顿就会出现。我们可以通过修改渲染设置来降低预览的负担,具体操作如下: 打开C4D软件,选中Ren…

    Vue 2023年5月28日
    00
  • JS实现的简单标签点击切换功能示例

    首先来讲一下JS实现的简单标签点击切换功能示例的攻略。 1. 确定页面结构和元素 首先我们需要确定页面结构和需要被点击切换的标签元素。在示例中,我们可以使用HTML ul 和 li 标签来实现。 <ul class="tab"> <li class="active">标签1</li>…

    Vue 2023年5月28日
    00
  • vue实现评价星星功能

    下面我将详细讲解“Vue实现评价星星功能”的完整攻略。 一、需求分析 在实现评价星星功能之前,我们需要首先明确需求,即实现一个能够显示、选择和保存星星评分数据的组件。在这个组件中,用户可以看到默认的星星评分,也可以选择一定的星星数量来提交评分数据。 二、界面设计 设计星星评价组件的界面,可以使用普通的HTML和CSS,然后在Vue里面进行引用。 其中,评分界…

    Vue 2023年5月29日
    00
  • 一个Vue页面的内存泄露分析详解

    一、什么是内存泄露? 首先,了解什么是内存泄露。内存泄露是指程序在申请动态内存后,无法释放已经申请的内存空间的情况。如果出现内存泄露,应用程序占用的内存会越来越多,进而引发系统的崩溃。 二、Vue页面中常见的内存泄露 Vue开发中常见的内存泄露问题通常有: 1.事件绑定不当:在Vue中,dom事件绑定需要在组件的生命周期hook函数中进行绑定,而不是在cre…

    Vue 2023年5月28日
    00
  • vue基于input实现密码的显示与隐藏功能

    Vue基于input实现密码的显示与隐藏功能的攻略如下: 开发环境搭建 首先我们需要保证有一个稳定的开发环境。这里我们可以借助脚手架工具Vue-cli,快速地搭建起一个本地环境。 密码框显示状态绑定 我们需要通过v-model指令来将input框的显示状态进行绑定。在data里面新增一个变量passwordVisible,并且默认设置为false,表示密码框…

    Vue 2023年5月27日
    00
  • vue-print-nb实现页面打印功能实例(含分页打印)

    让我来详细讲解一下“vue-print-nb实现页面打印功能实例(含分页打印)”的完整攻略。 1. 引入 vue-print-nb 首先,需要在 Vue 项目中引入 vue-print-nb 插件,可以使用 npm 或 yarn 进行安装: npm install vue-print-nb –save 或 yarn add vue-print-nb 引入方…

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