当前位置:首页 > VUE

vue实现拖动效果

2026-01-18 04:26:16VUE

使用 vuedraggable 库实现拖动

vuedraggable 是基于 Sortable.js 的 Vue 组件库,提供简单易用的拖拽功能。安装方式如下:

npm install vuedraggable

基础用法示例:

<template>
  <draggable v-model="list" @end="onDragEnd">
    <div v-for="item in list" :key="item.id">{{ item.name }}</div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';
export default {
  components: { draggable },
  data() {
    return {
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    };
  },
  methods: {
    onDragEnd() {
      console.log('拖动后的顺序:', this.list);
    }
  }
};
</script>

原生 HTML5 拖放 API

通过 HTML5 的 draggable 属性和事件实现基础拖放:

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

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Drag me' },
        { id: 2, text: 'Drop here' }
      ],
      draggedItem: null
    };
  },
  methods: {
    handleDragStart(e, item) {
      this.draggedItem = item;
      e.dataTransfer.effectAllowed = 'move';
    },
    handleDrop(e, targetItem) {
      if (this.draggedItem !== targetItem) {
        const fromIndex = this.items.indexOf(this.draggedItem);
        const toIndex = this.items.indexOf(targetItem);
        this.items.splice(fromIndex, 1);
        this.items.splice(toIndex, 0, this.draggedItem);
      }
    }
  }
};
</script>

自定义拖动动画

结合 CSS 过渡效果增强交互体验:

.drag-item {
  transition: transform 0.2s ease;
  cursor: grab;
}
.drag-item.dragging {
  opacity: 0.5;
  cursor: grabbing;
}

跨组件拖动

通过 Vuex 或事件总线实现跨组件数据同步:

// 在拖动事件中提交 mutation
this.$store.commit('updateList', newList);

移动端适配

对于触摸设备需添加 touch 事件支持:

@touchstart="handleTouchStart"
@touchmove="handleTouchMove"

性能优化

大数据量列表建议使用虚拟滚动:

<draggable v-model="list" :options="{ animation: 150 }">
  <virtual-list :size="50" :remain="8">
    <div v-for="item in list" :key="item.id">{{ item.name }}</div>
  </virtual-list>
</draggable>

vue实现拖动效果

标签: 拖动效果
分享给朋友:

相关文章

vue实现对话框效果

vue实现对话框效果

使用 Vue 实现对话框效果 在 Vue 中实现对话框效果可以通过组件化方式完成,通常结合 v-if/v-show 控制显示隐藏,以及插槽(slot)实现内容自定义。 基础对话框组件实现 创建一个…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HT…

vue如何实现拖动

vue如何实现拖动

Vue 实现拖动的几种方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,通过 draggable 属性和相关事件实现拖动功能。 <template> &…

vue实现数据拖动

vue实现数据拖动

Vue 实现数据拖动 在 Vue 中实现数据拖动通常涉及 HTML5 的拖放 API 或第三方库(如 vuedraggable)。以下是两种常见方法: 使用 HTML5 拖放 API 设置拖拽元素…

vue实现拖动图片验证

vue实现拖动图片验证

Vue 实现拖动图片验证功能 核心思路 拖动图片验证通常需要用户将图片拖动到指定区域或按正确顺序排列。实现时需要处理拖拽事件、验证逻辑和视觉反馈。 实现步骤 1. 基础组件结构 <templ…