当前位置: 首页 > news >正文

定制化 Docsify 文档框架实战分享

🌟 定制化 Docsify 文档框架实战分享

在构建前端文档平台时,我们希望拥有更友好的用户界面、便捷的搜索、清晰的目录导航以及实用的代码复制功能。借助 Docsify,我实现了以下几个方面的定制优化,分享给大家 🙌。

📌 本文基于 Docsify + 插件实现,包括自定义 JavaScript 功能注入与样式优化。

🎨 UI 界面改造

仿 CSDN 布局模式及 UI,去除左侧菜单收展,左侧菜单只展示文档目录,右侧增加搜索及文档内容目录,整体看上去更简洁点,当然你可以随意改你喜欢的样式;

原始 UI
在这里插入图片描述

改造后 UI
在这里插入图片描述

🎫 版本控制

通过动态更改文档资源根路径实现文档版本切换;

配置:

 basePath: sessionStorage.getItem("version") || "/docs/v1",

HTML 实现:

<div class="versionBox"><label for="version">版本:</label><select id="version" name="version" onchange="changeBasePath(this)"><option value="a">v1</option><option value="b">v2</option></select>
</div>

JS :

function changeBasePath(select) {var selectedValue = select.value;if (selectedValue === "a") {sessionStorage.setItem("version", "/docs/v1");sessionStorage.setItem("ver", "a");} else if (selectedValue === "b") {sessionStorage.setItem("version", "/docs/v2");sessionStorage.setItem("ver", "b");}window.location.reload();
}

🔍 搜索功能配置

通过引入 search.min.js 插件,并配置如下,实现了全文搜索功能,支持关键词高亮匹配与模糊查询。

配置代码:

search: {maxAge: 86400000, // 一天缓存paths: "auto",placeholder: "请输入关键词",noData: "未检索到相关内容!",depth: 2,hideOtherSidebarContent: false
}

📚 自定义浮动目录(锚点导航)

Docsify 默认只提供左侧文档目录,现需要实现一个右侧的文档内容导航目录,通过自定义插件读取文档内容生成目录。

实现逻辑包括:

  • 获取 .content 中所有 h1 ~ h3

  • 动态生成目录列表并缩进

  • 自动隐藏无标题页面目录

  • 修复锚点跳转偏移问题(插入空的

核心插件代码:

hook.doneEach(function () {var floatingToc = document.querySelector(".floating-toc");if (!floatingToc) {floatingToc = document.createElement("div");floatingToc.className = "floating-toc";document.body.appendChild(floatingToc);var tocHeader = document.createElement("h2");tocHeader.textContent = "目录";floatingToc.appendChild(tocHeader);}floatingToc.innerHTML = "<h2>目录</h2>";var currentUrl = window.location.href.split("?")[0];var content = document.querySelector(".content");if (content) {var headers = content.querySelectorAll("h1, h2, h3");if (headers.length > 1) {floatingToc.style.display = "block";var tocList = document.createElement("ul");floatingToc.appendChild(tocList);headers.forEach(function (header) {var li = document.createElement("li");var level = parseInt(header.tagName.substring(1)) - 1;li.style.marginLeft = level * 20 + "px";var anchorLink = document.createElement("a");anchorLink.href = currentUrl + "#" + header.id;anchorLink.textContent = header.textContent;li.appendChild(anchorLink);tocList.appendChild(li);});} else {floatingToc.style.display = "none";}var anchors = document.querySelectorAll("h2[id],h3[id],h4[id]");anchors.forEach(function (anchor) {var fixAnchorDiv = document.createElement("div");fixAnchorDiv.className = "fix-anchor";fixAnchorDiv.id = anchor.id;anchor.parentNode.insertBefore(fixAnchorDiv, anchor);anchor.id = "";});} else {floatingToc.style.display = "none";}
});

📋 代码复制功能

我们使用了 docsify-copy-code 插件,给所有代码块添加“点击复制”按钮。

引入插件:

<script src="//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script>

配置:

copyCode: {
buttonText: "点击复制",
errorText: "Error",
successText: "复制成功"
}

✅ 总结

通过简单的 HTML + JS + 插件组合,我们在原始 Docsify 的基础上实现了以下功能:

  • 多版本切换支持

  • 搜索功能优化

  • 浮动目录导航

  • 一键复制代码

  • UI 更加美观清晰

🧑‍💻 后续计划

  • 🌐 支持多语言国际化(i18n)

  • 🌗 主题切换(深色 / 浅色模式)

  • 🚀 与 GitHub Actions 等 CI/CD 集成自动部署

源码地址

https://github.com/Bing-b/docs

相关文章:

  • async-profiler火焰图找出耗CPU方法
  • # 04_Elastic Stack 从入门到实践(四)--2
  • Docker 设置镜像源后仍无法拉取镜像问题排查
  • postman莫名奇妙报错,可能是注释引起的。postman 过滤请求体中的注释。
  • Oracle 19c部署之数据库软件安装(二)
  • 细说STM32单片机FreeRTOS任务管理API函数及多任务编程的实现方法
  • 深入了解v-model的原理:v-model拆分为value属性和input事件,表单类组件的封装并用v-model简化代码
  • 【python画图】:从入门到精通绘制完美柱状图
  • 【Qt】初识Qt(一)
  • 4.15【Q】netsafe
  • 量化交易 - 布林带(Bollinger Bands)策略研究 - 源码
  • 智能制造中如何进行智能工厂三年规划设计?【附全文阅读】
  • 双指针算法(二)
  • 【系统搭建】DPDK实现两虚拟机基于testpmd和l2fwd的收发包
  • C++之类模板
  • 基于AI大语言模型的历史文献分析在气候与灾害重建领域中的技术应用
  • 对抗生成进化:基于DNA算法的AIGC检测绕过——让AI创作真正“隐形“
  • ubtuntu安装docker拉取iwebsec镜像
  • 智慧矿山数字孪生解决方案:技术剖析与实践
  • Windows快速切换屏幕/桌面
  • 关于新冠疫情防控与病毒溯源的中方行动和立场
  • 特朗普加征关税冲击波:美国零售、汽车、航空、科技企业纷纷预警业绩波动
  • 不准打小孩:童年逆境经历视角下的生育友好社会
  • 杨国荣︱学术上的立此存照——《故旧往事,欲说还休》读后
  • 初步结果显示,卡尼领导的加拿大自由党在联邦众议院选举中获胜
  • 圆桌|特朗普上台百日未能结束俄乌冲突,若美国“退出”会发生什么?