你瞅啥呢

2025-02-11 vue3拖拽元素案例——来自deepseek

复制代码
<template>
  <div class="parent">
    <div
      v-for="(item, index) in items"
      :key="item.id"
      class="child"
      draggable="true"
      @dragstart="onDragStart(index)"
      @dragover.prevent="onDragOver(index)"
      @drop="onDrop(index)"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const items = ref([
      { id: 1, text: 'Item 1' },
      { id: 2, text: 'Item 2' },
      { id: 3, text: 'Item 3' },
      { id: 4, text: 'Item 4' },
      { id: 5, text: 'Item 5' },
    ]);

    let draggedIndex = null;

    const onDragStart = (index) => {
      draggedIndex = index;
    };

    const onDragOver = (index) => {
      if (draggedIndex === null) return;

      const draggedItem = items.value[draggedIndex];
      items.value.splice(draggedIndex, 1);
      items.value.splice(index, 0, draggedItem);
      draggedIndex = index;
    };

    const onDrop = () => {
      draggedIndex = null;
    };

    return {
      items,
      onDragStart,
      onDragOver,
      onDrop,
    };
  },
};
</script>

<style>
.parent {
  display: flex;
  flex-wrap: nowrap;
  gap: 10px;
}

.child {
  padding: 20px;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
  cursor: grab;
}
</style>
复制代码
  • draggable="true": 使子元素可拖拽。

  • @dragstart: 当开始拖拽时,记录当前拖拽的元素的索引。

  • @dragover.prevent: 当拖拽的元素经过其他元素时,阻止默认行为,并交换元素的位置。

  • @drop: 当松开鼠标时,完成拖拽操作。

vue3自带了dragstart、dragover、drop事件,使得拖拽逻辑更简单

posted @   叶乘风  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2023-02-11 2023-02-11 如何在AndroidStudio中查看Kotlin的版本
点击右上角即可分享
微信分享提示