当前位置:首页 > VUE

vue拖拽实现页面

2026-02-19 10:16:32VUE

Vue 拖拽实现页面的方法

使用 HTML5 原生拖拽 API

HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。在 Vue 中可以直接使用这些 API。

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

<script>
export default {
  methods: {
    handleDragStart(event) {
      event.dataTransfer.setData('text/plain', '拖拽数据');
    },
    handleDrop(event) {
      const data = event.dataTransfer.getData('text/plain');
      console.log('接收到的数据:', data);
    },
    handleDragEnd() {
      console.log('拖拽结束');
    }
  }
};
</script>

使用第三方库 vue-draggable

vue-draggable 是一个基于 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>

使用拖拽库 interact.js

interact.js 是一个功能强大的拖拽库,支持更复杂的拖拽交互。

安装:

npm install interactjs

使用:

<template>
  <div ref="dragElement" class="drag-me">拖拽我</div>
</template>

<script>
import interact from 'interactjs';

export default {
  mounted() {
    interact(this.$refs.dragElement)
      .draggable({
        onmove: (event) => {
          const target = event.target;
          const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
          const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
          target.style.transform = `translate(${x}px, ${y}px)`;
          target.setAttribute('data-x', x);
          target.setAttribute('data-y', y);
        }
      });
  }
};
</script>

<style>
.drag-me {
  width: 100px;
  height: 100px;
  background: #ccc;
  cursor: move;
}
</style>

自定义拖拽实现

如果需要更灵活的拖拽逻辑,可以手动实现拖拽功能。

vue拖拽实现页面

<template>
  <div 
    ref="dragElement"
    @mousedown="startDrag"
    @mousemove="onDrag"
    @mouseup="stopDrag"
    class="drag-me"
  >
    拖拽我
  </div>
</template>

<script>
export default {
  data() {
    return {
      isDragging: false,
      startX: 0,
      startY: 0,
      offsetX: 0,
      offsetY: 0
    };
  },
  methods: {
    startDrag(event) {
      this.isDragging = true;
      this.startX = event.clientX;
      this.startY = event.clientY;
      this.offsetX = this.$refs.dragElement.offsetLeft;
      this.offsetY = this.$refs.dragElement.offsetTop;
    },
    onDrag(event) {
      if (!this.isDragging) return;
      const dx = event.clientX - this.startX;
      const dy = event.clientY - this.startY;
      this.$refs.dragElement.style.left = `${this.offsetX + dx}px`;
      this.$refs.dragElement.style.top = `${this.offsetY + dy}px`;
    },
    stopDrag() {
      this.isDragging = false;
    }
  }
};
</script>

<style>
.drag-me {
  position: absolute;
  width: 100px;
  height: 100px;
  background: #ccc;
  cursor: move;
}
</style>

以上方法可以根据需求选择适合的方式实现拖拽功能。

标签: 拖拽页面
分享给朋友:

相关文章

vue实现组织架构页面

vue实现组织架构页面

Vue 实现组织架构页面 数据准备 组织架构通常以树形结构展示,需要准备嵌套的节点数据。例如: data() { return { orgData: { id: 1,…

jquery页面

jquery页面

jQuery 页面操作指南 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互的操作。以下是 jQuery 在页面中的常见使用方法…

vue实现页面缓存

vue实现页面缓存

Vue 实现页面缓存的常用方法 使用 <keep-alive> 组件 <keep-alive> 是 Vue 内置组件,用于缓存动态组件或路由组件。通过包裹需要缓存的组件,可以保…

实现js页面跳转页面跳转页面

实现js页面跳转页面跳转页面

使用 window.location.href 实现跳转 通过修改 window.location.href 属性,可以直接跳转到目标 URL。这种方法会触发页面刷新,并在浏览器历史记录中留下记录。…

jquery页面加载

jquery页面加载

jQuery 页面加载事件 在 jQuery 中,页面加载事件通常通过 $(document).ready() 或简写的 $() 来实现。这种方式确保代码在 DOM 完全加载后执行,但无需等待图片等资…

jquery页面刷新

jquery页面刷新

jQuery 实现页面刷新 使用 jQuery 刷新页面可以通过以下几种方法实现: 方法一:使用 location.reload() $(document).ready(function() {…