feat(demo、package.json): ✨ 新增拖动demo示例,使用vue-draggable-plus库
This commit is contained in:
@@ -65,6 +65,7 @@
|
||||
"qs": "^6.14.0",
|
||||
"sortablejs": "^1.15.6",
|
||||
"vue": "^3.5.13",
|
||||
"vue-draggable-plus": "^0.6.0",
|
||||
"vue-i18n": "^11.1.2",
|
||||
"vue-router": "^4.5.0"
|
||||
},
|
||||
|
||||
123
src/views/demo/drag.vue
Normal file
123
src/views/demo/drag.vue
Normal file
@@ -0,0 +1,123 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-header">基础示例</span></template>
|
||||
<VueDraggable ref="el" v-model="userList" class="drag-container">
|
||||
<div v-for="item in userList" :key="item.name" class="drag-item">
|
||||
{{ item.name }}
|
||||
</div>
|
||||
</VueDraggable>
|
||||
</el-card>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-header">过渡动画</span></template>
|
||||
<VueDraggable
|
||||
v-model="userList"
|
||||
target=".sort-target"
|
||||
:scroll="true"
|
||||
class="drag-container"
|
||||
>
|
||||
<TransitionGroup type="transition" tag="ul" name="fade" class="sort-target">
|
||||
<li v-for="item in userList" :key="item.name" class="drag-item">
|
||||
{{ item.name }}
|
||||
</li>
|
||||
</TransitionGroup>
|
||||
</VueDraggable>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-header">表格拖拽排序</span></template>
|
||||
<VueDraggable v-model="userList" target="tbody" :animation="150">
|
||||
<el-table :data="userList" row-key="name">
|
||||
<el-table-column label="姓名" prop="name" />
|
||||
<el-table-column label="角色" prop="roles" />
|
||||
</el-table>
|
||||
</VueDraggable>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-header">指定元素拖拽排序</span></template>
|
||||
<VueDraggable v-model="userList" target="tbody" handle=".handle" :animation="150">
|
||||
<el-table :data="userList" row-key="name">
|
||||
<el-table-column label="姓名" prop="name" />
|
||||
<el-table-column label="角色" prop="roles" />
|
||||
<el-table-column label="操作" width="100">
|
||||
<template #default>
|
||||
<el-button size="default" class="handle">移动</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</VueDraggable>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { VueDraggable } from "vue-draggable-plus";
|
||||
|
||||
const userList = ref([
|
||||
{ name: "路飞", roles: "船长·格斗家·D之一族" },
|
||||
{ name: "索隆", roles: "剑豪·战斗员·三刀流大师" },
|
||||
{ name: "娜美", roles: "航海士·气象学家·财务官" },
|
||||
{ name: "山治", roles: "厨师·格斗家·黑足" },
|
||||
{ name: "罗宾", roles: "考古学家·历史正文解读者" },
|
||||
]);
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
padding: 20px;
|
||||
|
||||
.el-card {
|
||||
margin-bottom: 20px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.drag-container {
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.drag-item {
|
||||
padding: 12px;
|
||||
margin-bottom: 8px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
cursor: grab;
|
||||
border-radius: 6px;
|
||||
transition: transform 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.drag-item:active {
|
||||
cursor: grabbing;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
}
|
||||
|
||||
/* 过渡动画 */
|
||||
.fade-move,
|
||||
.fade-enter-active,
|
||||
.fade-leave-active {
|
||||
transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);
|
||||
}
|
||||
|
||||
.fade-enter-from,
|
||||
.fade-leave-to {
|
||||
opacity: 0;
|
||||
transform: scaleY(0.01) translate(20px, 0);
|
||||
}
|
||||
|
||||
.fade-leave-active {
|
||||
position: absolute;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user