当前位置:首页 > VUE

vue实现拖动功能

2026-02-19 12:46:37VUE

使用 HTML5 拖放 API

在 Vue 中可以通过 HTML5 的拖放 API 实现基础的拖动功能。通过 draggable 属性和事件监听实现元素的拖放。

<template>
  <div 
    draggable="true"
    @dragstart="handleDragStart"
    @dragend="handleDragEnd"
    @dragover.prevent
    @drop="handleDrop"
  >
    拖拽元素
  </div>
</template>

<script>
export default {
  methods: {
    handleDragStart(e) {
      e.dataTransfer.setData('text/plain', e.target.id);
    },
    handleDrop(e) {
      const id = e.dataTransfer.getData('text/plain');
      const draggableElement = document.getElementById(id);
      e.target.appendChild(draggableElement);
    },
    handleDragEnd() {
      console.log('拖拽结束');
    }
  }
}
</script>

使用第三方库 vue-draggable

vue-draggable 是基于 Sortable.js 的 Vue 拖拽组件,适用于列表排序等复杂场景。

安装依赖:

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>

自定义拖动指令

通过 Vue 自定义指令实现更灵活的拖动控制。

vue实现拖动功能

<template>
  <div v-drag>可拖动的自定义元素</div>
</template>

<script>
export default {
  directives: {
    drag: {
      inserted(el) {
        el.draggable = true;
        el.style.cursor = 'move';

        el.addEventListener('dragstart', (e) => {
          e.dataTransfer.setData('text/plain', el.id);
        });
      }
    }
  }
}
</script>

结合 CSS 提升交互体验

为拖动元素添加过渡效果和视觉反馈。

.draggable-item {
  transition: transform 0.2s;
  user-select: none;
}

.draggable-item:active {
  opacity: 0.8;
  transform: scale(1.05);
}

跨组件拖动实现

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

// 在拖动源组件
this.$emit('drag-start', payload);

// 在目标组件
this.$on('drag-start', (payload) => {
  this.handleDrop(payload);
});

以上方法覆盖了从基础到进阶的 Vue 拖动实现方案,可根据具体需求选择适合的方式。

标签: 拖动功能
分享给朋友:

相关文章

vue实现桌面功能

vue实现桌面功能

Vue 实现桌面功能的方法 Vue.js 可以通过结合 Electron 或 NW.js 等框架实现桌面应用开发。以下是几种常见的方法: 使用 Vue 与 Electron 结合 Electron…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…

vue 实现打印功能

vue 实现打印功能

使用 vue-print-nb 插件 安装 vue-print-nb 插件: npm install vue-print-nb --save 在 main.js 中引入并注册插件: import…

vue实现拖动刻度

vue实现拖动刻度

实现拖动刻度功能 在Vue中实现拖动刻度功能可以通过结合原生HTML5的拖拽API和Vue的数据绑定特性来完成。以下是一个完整的实现方案: 基本实现思路 创建一个可拖动的滑块元素 监听鼠标事件处理拖…

vue答题功能实现

vue答题功能实现

Vue 答题功能实现 数据结构设计 使用 Vue 的响应式数据管理题目和答案。通常需要一个数组存储题目列表,每个题目包含题干、选项、正确答案等字段。 data() { return {…

vue实现关注功能

vue实现关注功能

Vue 实现关注功能的方法 数据绑定与状态管理 使用 Vue 的响应式数据绑定功能,通过 v-model 或 v-bind 动态绑定关注按钮的状态。在组件的 data 或 Vuex 状态管理中定义 i…