当前位置:首页 > VUE

vue实现左右拖拽

2026-03-10 01:41:04VUE

实现左右拖拽功能

在Vue中实现左右拖拽功能可以通过监听鼠标事件和使用CSS变换来实现。以下是具体的实现方法。

使用鼠标事件监听

通过监听mousedownmousemovemouseup事件来跟踪拖拽行为。

<template>
  <div
    class="draggable"
    @mousedown="startDrag"
    @mousemove="onDrag"
    @mouseup="stopDrag"
    @mouseleave="stopDrag"
    :style="{ left: position.x + 'px', top: position.y + 'px' }"
  >
    拖拽我
  </div>
</template>

<script>
export default {
  data() {
    return {
      isDragging: false,
      startPos: { x: 0, y: 0 },
      position: { x: 0, y: 0 }
    };
  },
  methods: {
    startDrag(e) {
      this.isDragging = true;
      this.startPos = {
        x: e.clientX - this.position.x,
        y: e.clientY - this.position.y
      };
    },
    onDrag(e) {
      if (!this.isDragging) return;
      this.position = {
        x: e.clientX - this.startPos.x,
        y: e.clientY - this.startPos.y
      };
    },
    stopDrag() {
      this.isDragging = false;
    }
  }
};
</script>

<style>
.draggable {
  position: absolute;
  width: 100px;
  height: 100px;
  background-color: #42b983;
  cursor: move;
  user-select: none;
}
</style>

使用第三方库

对于更复杂的拖拽需求,可以使用第三方库如vuedraggablesortablejs

vue实现左右拖拽

安装vuedraggable

npm install vuedraggable

示例代码:

vue实现左右拖拽

<template>
  <div>
    <draggable v-model="list" @start="drag=true" @end="drag=false">
      <div v-for="element in list" :key="element.id">
        {{ element.name }}
      </div>
    </draggable>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ]
    };
  }
};
</script>

使用CSS拖拽

对于简单的拖拽效果,可以使用CSS的drag属性,但兼容性较差。

<template>
  <div draggable="true" @dragstart="handleDragStart">
    拖拽我
  </div>
</template>

<script>
export default {
  methods: {
    handleDragStart(e) {
      e.dataTransfer.setData('text/plain', '拖拽内容');
    }
  }
};
</script>

注意事项

确保拖拽元素具有position: absoluteposition: relative样式,以便正确计算位置。

拖拽过程中避免触发文本选择,可以通过CSS设置user-select: none

对于移动端支持,需要额外处理touchstarttouchmovetouchend事件。

标签: 拖拽vue
分享给朋友:

相关文章

vue实现评价

vue实现评价

Vue实现评价功能 数据绑定与双向绑定 Vue的核心特性是数据绑定和双向绑定,通过v-model指令可以轻松实现表单输入与应用状态之间的双向绑定。在评价功能中,可以使用v-model绑定评论文本和评分…

vue实现左右拉伸

vue实现左右拉伸

实现左右拉伸布局的方法 使用CSS Flexbox布局 Flexbox可以轻松实现左右拉伸的效果。通过设置display: flex和flex-grow属性,可以让元素填充可用空间。 <div…

vue实现菜单定位

vue实现菜单定位

实现菜单定位的方法 在Vue中实现菜单定位功能,可以通过监听滚动事件或使用Intersection Observer API来判断当前显示的菜单项,并高亮对应的导航链接。以下是几种常见的实现方式:…

vue怎样实现mvvm

vue怎样实现mvvm

Vue 实现 MVVM 的原理 Vue 的 MVVM(Model-View-ViewModel)模式通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 MVVM 的核心机制: 数…

vue打包实现推送

vue打包实现推送

Vue 项目打包与自动化部署推送 打包 Vue 项目 使用以下命令生成生产环境代码,默认输出到 dist 目录: npm run build 配置自动化推送(以 GitHub Pages 为例)…

vue实现移动端

vue实现移动端

Vue 实现移动端开发 Vue 适合移动端开发,结合相关框架和工具可以高效构建跨平台或原生应用。以下是常见实现方式及关键步骤: 使用 Vue 开发移动端网页(H5) 响应式设计 在 public/…