Animated Breadcrumb
展示层级中的当前位置,在空间有限时折叠中间链接。
适用场景
- 用于具有层级关系的页面,帮助读者确认当前位置并返回上级页面。
安装
选择安装方式,用法示例将同步更新导入路径。
$ bunx --bun shadcn-vue@2.8.2 add https://orvui.efu.me/r/breadcrumb.json
首次使用时,将安装的 src/components/orvui/styles.css 导入项目样式入口。
示例
预览
packages/vue/src/motion/breadcrumb/demo.vue
<script setup lang="ts">
import { nextTick, ref } from "vue";
import { ArrowUpRight, Folder, Home } from "lucide-vue-next";
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@/components/orvui/motion/breadcrumb";
const segments = "Workspace/Projects/Website/Design system/Components/Navigation/Breadcrumb".split("/");
const current = ref(5), root = ref<HTMLElement | null>(null);
async function navigate(index: number, event?: MouseEvent) {
if (event && (event.button !== 0 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)) return;
event?.preventDefault(); current.value = index;
await nextTick(); root.value?.querySelector<HTMLElement>('[aria-current="page"]')?.focus();
}
</script>
<template>
<div ref="root" class="w-full max-w-lg space-y-8 px-4">
<Breadcrumb class="min-h-[4.25rem] sm:min-h-8"><BreadcrumbList :max-items="3">
<BreadcrumbItem v-for="(segment, index) in segments.slice(0, current + 1)" :key="segment">
<BreadcrumbSeparator v-if="index > 0" />
<BreadcrumbPage v-if="index === current" :tabindex="-1"><Home v-if="index === 0" aria-hidden="true" />{{ segment }}</BreadcrumbPage>
<BreadcrumbLink v-else :href="`#${segment.toLowerCase()}`" @click="navigate(index, $event)"><Home v-if="index === 0" aria-hidden="true" />{{ segment }}</BreadcrumbLink>
</BreadcrumbItem>
</BreadcrumbList></Breadcrumb>
<div class="min-h-20 border-t border-border/60 pt-5">
<button v-if="current < segments.length - 1" type="button" @click="navigate(Math.min(current + 1, segments.length - 1))"
class="flex w-full items-center gap-3 rounded-lg border border-border/60 px-4 py-3 text-start text-sm transition-colors hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring">
<Folder aria-hidden="true" class="size-4 text-muted-foreground" /><span class="flex-1">{{ segments[current + 1] }}</span><ArrowUpRight aria-hidden="true" class="size-3.5 text-muted-foreground" />
</button>
<p v-else class="py-3 text-center text-sm text-muted-foreground">Choose a parent path to go back.</p>
</div>
</div>
</template>
packages/vue/src/motion/breadcrumb/src/Breadcrumb.vue
状态与事件
此示例组合没有声明成对的受控属性与 update 事件。使用已列出的属性、原生事件和插槽组合内容;不要为它添加未公开的 v-model。
API 参考
Breadcrumb
ariaLabel?string"Breadcrumb"插槽
default() => VNodeChild#defaultBreadcrumbItem
插槽
default() => VNodeChild#defaultBreadcrumbLink
href?string—as?any"a"插槽
default() => VNodeChild#defaultBreadcrumbPage
插槽
default() => any#defaultBreadcrumbSeparator
插槽
default() => VNodeChild#defaultBreadcrumbEllipsis
label?string"Show hidden paths"插槽
default() => VNodeChild#default无障碍
为交互控件提供明确的无障碍名称。保留文档中的键盘路径、可见焦点与减少动态效果状态;自定义插槽应继续保留所替代部件的语义。
常见问题
- 如何配置 Animated Breadcrumb?
- 通过 as 属性选择原生目标元素,并提供对应的链接属性。
- 如何连接到应用状态?
- 通过default 插槽提供内容,应用副作用由调用方管理。
- 可以在服务端渲染吗?
- 可以在 Vue SSR 应用中正常渲染。服务端与客户端的初始 props 应保持一致;浏览器测量与交互资源在挂载后启动。
更新于
来源与许可 ↗MIT · 0.1.1