当前位置:首页 > VUE

vue实现卡片拖动

2026-01-18 10:57:27VUE

Vue 实现卡片拖动的几种方法

使用 HTML5 拖放 API

HTML5 提供了原生的拖放 API,可以在 Vue 中直接使用。通过 draggable 属性标记可拖动的元素,并监听 dragstartdragoverdrop 事件来实现拖放功能。

vue实现卡片拖动

<template>
  <div 
    v-for="(item, index) in items" 
    :key="index"
    draggable="true"
    @dragstart="handleDragStart(index)"
    @dragover.prevent
    @drop="handleDrop(index)"
  >
    {{ item }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3'],
      draggedIndex: null
    };
  },
  methods: {
    handleDragStart(index) {
      this.draggedIndex = index;
    },
    handleDrop(index) {
      const draggedItem = this.items[this.draggedIndex];
      this.items.splice(this.draggedIndex, 1);
      this.items.splice(index, 0, draggedItem);
    }
  }
};
</script>

使用第三方库 Vue.Draggable

Vue.Draggable 是一个基于 Sortable.js 的 Vue 组件,提供了更简单的拖放实现方式。安装后可以直接在模板中使用。

vue实现卡片拖动

npm install vuedraggable
<template>
  <draggable v-model="items" @end="onDragEnd">
    <div v-for="(item, index) in items" :key="index">
      {{ item }}
    </div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3']
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖放完成');
    }
  }
};
</script>

使用自定义拖拽逻辑

对于更复杂的拖拽需求,可以结合鼠标事件(mousedownmousemovemouseup)实现自定义拖拽逻辑。这种方式灵活性更高,但实现起来相对复杂。

<template>
  <div 
    v-for="(item, index) in items" 
    :key="index"
    class="draggable-item"
    @mousedown="startDrag(index, $event)"
  >
    {{ item }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3'],
      isDragging: false,
      draggedIndex: null,
      startY: 0
    };
  },
  methods: {
    startDrag(index, event) {
      this.isDragging = true;
      this.draggedIndex = index;
      this.startY = event.clientY;
      document.addEventListener('mousemove', this.onDrag);
      document.addEventListener('mouseup', this.stopDrag);
    },
    onDrag(event) {
      if (!this.isDragging) return;
      const y = event.clientY;
      const deltaY = y - this.startY;
      // 根据 deltaY 计算拖拽位置并更新 UI
    },
    stopDrag() {
      this.isDragging = false;
      document.removeEventListener('mousemove', this.onDrag);
      document.removeEventListener('mouseup', this.stopDrag);
    }
  }
};
</script>

<style>
.draggable-item {
  cursor: grab;
  user-select: none;
}
</style>

使用拖拽库 interact.js

interact.js 是一个轻量级的拖拽库,支持更高级的拖拽功能(如限制拖拽范围、吸附等)。结合 Vue 使用可以实现复杂的拖拽交互。

npm install interactjs
<template>
  <div 
    v-for="(item, index) in items" 
    :key="index"
    class="draggable-item"
    ref="dragItem"
  >
    {{ item }}
  </div>
</template>

<script>
import interact from 'interactjs';

export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3']
    };
  },
  mounted() {
    interact(this.$refs.dragItem)
      .draggable({
        onmove: (event) => {
          const target = event.target;
          const x = (parseFloat(target.style.left) || 0) + event.dx;
          const y = (parseFloat(target.style.top) || 0) + event.dy;
          target.style.left = `${x}px`;
          target.style.top = `${y}px`;
        }
      });
  }
};
</script>

总结

  • HTML5 拖放 API:适合简单的拖放需求,无需额外依赖。
  • Vue.Draggable:基于 Sortable.js,适合列表排序等常见场景。
  • 自定义拖拽逻辑:灵活性高,适合复杂交互。
  • interact.js:功能强大,支持高级拖拽特性。

根据项目需求选择合适的实现方式。

标签: 拖动卡片
分享给朋友:

相关文章

vue 实现拖动效果

vue 实现拖动效果

使用 Vue 实现拖动效果 Vue 提供了多种方式实现拖动效果,可以通过原生 HTML5 的拖放 API,也可以使用第三方库如 vuedraggable。以下是两种常见的方法: 使用 HTML5 拖…

vue实现添加卡片

vue实现添加卡片

Vue 实现添加卡片功能 数据驱动渲染 在Vue中,卡片通常通过v-for循环数据数组渲染。定义cards数组存储卡片数据,每个卡片对象包含标题、内容等属性: data() { return {…

vue实现商品卡片列表

vue实现商品卡片列表

Vue实现商品卡片列表 使用Vue实现商品卡片列表需要结合组件化开发思想,通过数据驱动视图的方式动态渲染商品信息。以下是具体实现方法: 数据准备 在Vue组件中定义商品数据数组,每个商品对象包含必要…

vue实现轮播图拖动

vue实现轮播图拖动

Vue 实现轮播图拖动功能 实现轮播图拖动功能需要结合 Vue 的响应式数据和触摸事件(或鼠标事件)。以下是具体实现方法: 基础轮播图结构 使用 Vue 的 v-for 渲染轮播项,并通过 CSS…

react如何实现表头拖动

react如何实现表头拖动

实现表头拖动的步骤 使用React实现表头拖动功能可以通过HTML5的拖放API结合React的状态管理来完成。以下是具体实现方法: 使用HTML5拖放API HTML5提供了原生的拖放API,可以…

React如何让modal可以被拖动

React如何让modal可以被拖动

实现可拖动Modal的方法 在React中实现可拖动的Modal,可以通过结合HTML5的拖拽API或第三方库如react-draggable来完成。以下是两种常用方法的详细说明: 使用react-…