目前antd vue3.2.13
的tabs标签页不支持左右拖拽功能。现项目中需要使用,为此引入vuedraggable
vuedraggable
npm i vuedraggable
<template>
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane v-for="item in state.list" :key="item.id" tab="Tab 1">
我是{{ item.name }},今年{{ item.age }}
</a-tab-pane>
<template #renderTabBar>
<div class="ant-tabs-nav-wrap">
<div class="ant-tabs-nav-list" style="transform: translate(0px, 0px)">
<draggable v-model="state.list" item-key="id">
<template #item="{ element }">
<div
class="ant-tabs-tab"
:class="{ 'ant-tabs-tab-active': activeKey === element.id }"
@click="activeKey = element.id"
>
<div
role="tab"
aria-selected="true"
class="ant-tabs-tab-btn"
tabindex="0"
id="rc-tabs-12-tab-1"
aria-controls="rc-tabs-12-panel-1"
>
{{ element.name }}
</div>
</div>
</template>
</draggable>
</div>
</div>
</template>
</a-tabs>
</template>
<script setup lang="ts">
import { reactive, ref } from 'vue'
import draggable from 'vuedraggable'
const activeKey = ref<number>(0)
const state = reactive({
list: [
{
id: 0,
name: '张三',
age: 18
},
{
id: 1,
name: '李四',
age: 20
},
{
id: 2,
name: '王五',
age: 24
}
]
})
</script>
<!-- 基础部分 -->
<a-tab-pane key="1" tab="Tab 1">Content of Tab Pane 1</a-tab-pane>
<a-tab-pane key="2" tab="Tab 2">Content of Tab Pane 2</a-tab-pane>
<!-- 自定义表头部分 -->
<template #renderTabBar="{ DefaultTabBar, ...props }">
<!-- 自定义内容 -->
</template>
F12
审查元素,将页头的样式复制一份
<draggable>
标签中准备
>参考指南
:class="{ 'ant-tabs-tab-active': activeKey === element.id }"
<a-tab-pane>
标签,其余均通过循环展示———————————————————————
PS:个人总结,仅供参考,不足之处,欢迎评论指教。