vuetom / vitepress-theme-vuetom

A vitepress theme, including document and blog styles
https://lauset.github.io/vitepress-theme-vuetom/
MIT License
30 stars 4 forks source link

如何根据md的标题提取sidebar #5

Closed didoee closed 1 year ago

didoee commented 2 years ago

如何根据md的标题提取sidebar

didoee commented 2 years ago

想知道你是如何根据md的标题提取sidebar的

lauset commented 2 years ago

sidebar可以分为左侧导航栏与右侧文章内的导航栏

左侧导航栏:

根据 .vitepress/config.ts 中配置的 sidebar 内容提取得到的,左侧导航栏与 md 文件的标题没有直接关联。 可通过调用 vitepress 中 sidebar 中方法得到左侧导航栏数据 const { sidebar, hasSidebar } = useSidebar() vitepress 中 sidebar.ts 源码文件

文章内导航:

根据 md 文件中的#标题来决定的,可通过 vitepress 中 useData 获取当前文章的所有导航

import { useData } from 'vitepress'

const { page, frontmatter, theme } = useData()

// ....

v-for="{ title, link, children } in page.headers"

对于点击导航跳转是通过操作 dom 实现的

function handleClick({ target: el }: Event) {
  const id = '#' + (el as HTMLAnchorElement).href!.split('#')[1]
  const heading = document.querySelector<HTMLAnchorElement>(
    decodeURIComponent(id)
  )
  heading?.focus()
}
didoee commented 2 years ago

好的,感谢