Dock
将紧凑导航操作分组,由指示器跟随当前活动项目。
适用场景
- 当界面需要以下行为时使用 Dock:将紧凑导航操作分组,由指示器跟随当前活动项目。
安装
选择安装方式,用法示例将同步更新导入路径。
$ bunx --bun shadcn-vue@2.8.2 add https://orvui.efu.me/r/dock.json
此示例还需要:
终端
pnpm add lucide-vue-next@^0.468.0首次使用时,将安装的 src/components/orvui/styles.css 导入项目样式入口。
示例
预览
packages/vue/src/motion/dock/demo.vue
<script setup lang="ts">
import { ref } from "vue";
import { Calendar, Home, Mail, Music, Settings, Sparkles } from "lucide-vue-next";
import { Dock, DockItem, DockSeparator } from "@/components/orvui/motion/dock";
const selected = ref("home");
const destinations = [
{ id: "home", icon: Home, label: "Home" }, { id: "mail", icon: Mail, label: "Mail" },
{ id: "calendar", icon: Calendar, label: "Calendar" }, { id: "music", icon: Music, label: "Music" },
{ id: "discover", icon: Sparkles, label: "Discover" },
];
// Simple Icons 16.35.0, distributed by @iconify-json/simple-icons 1.2.100; CC0-1.0.
const githubPath = "M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12";
</script>
<template><div class="w-full overflow-x-auto py-8"><div class="flex min-w-max justify-center px-2"><Dock>
<DockItem v-for="destination in destinations" :key="destination.id" :aria-label="destination.label" :active="selected === destination.id" @click="selected = destination.id"><component :is="destination.icon" class="h-5 w-5" /></DockItem>
<DockSeparator /><DockItem aria-label="Settings" :active="selected === 'settings'" @click="selected = 'settings'"><Settings class="h-5 w-5" /></DockItem>
<DockItem aria-label="GitHub"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="h-5 w-5"><path :d="githubPath" /></svg></DockItem>
</Dock></div></div></template>
packages/vue/src/motion/dock/src/Dock.vue
状态与事件
此示例组合没有声明成对的受控属性与 update 事件。使用已列出的属性、原生事件和插槽组合内容;不要为它添加未公开的 v-model。
API 参考
Dock
size?number44插槽
default() => VNodeChild#defaultDockItem
active?booleanfalseas?"div" | "button"—ariaLabel?string—事件
click—@click插槽
default() => VNodeChild#defaultDockSeparator
插槽
default() => VNodeChild#default无障碍
为交互控件提供明确的无障碍名称。保留文档中的键盘路径、可见焦点与减少动态效果状态;自定义插槽应继续保留所替代部件的语义。
常见问题
- 如何配置 Dock?
- 通过 size 配置 Dock;API 表列出其类型与默认值。
- 如何连接到应用状态?
- 通过default 插槽提供内容,应用副作用由调用方管理。
- 可以在服务端渲染吗?
- 可以在 Vue SSR 应用中正常渲染。服务端与客户端的初始 props 应保持一致;浏览器测量与交互资源在挂载后启动。
更新于
来源与许可 ↗MIT · 0.1.1