vue2中使用vue-markdown,并生成左侧目录结构

本文介绍了如何在Vue项目中使用npm下载并配置vue-markdown-loader处理Markdown文件,同时实现代码高亮和自动生成左侧目录,包括获取目录数据、组装树结构以及滚动到对应位置的功能。
摘要由CSDN通过智能技术生成

#### 下载依赖

npm i github-markdown-css highlight.js vue-loader vue-markdown-loader 

#### 配置 webpack

config.module

.rule("md")

.test(/\.md/)

.use("vue-loader")

.loader("vue-loader")

.end()

.use("vue-markdown-loader")

.loader("vue-markdown-loader/lib/markdown-compiler")

.options({

raw: true,

})

.end();

#### 引入依赖

// 代码高亮

import "highlight.js/styles/github.css";

// markdown样式,默认是黑色主题,可在后面追加对应主题的样式,

//如白色 /github-markdown-light.css

import "github-markdown-css";

// 对应的md文件

import HelpUseMd from "./help-use.md";

···

// 作为组件使用

components: { HelpUseMd}

<!-- 使用 -->

<help-use-md />

#### 生成左侧目录

##### 1 获取目录数据

const content =

document.getElementById("content").children[0].children[1].children;

var arr = [];

for (let i = 0; i < content.length; i++) {

let header = content[i].localName;

if (/\b[h][0-9]\b/.test(header)) {

let ele = content[i];

let name = ele.innerText;

// 设置id

ele.setAttribute("id", `md-${i}`);

arr.push({

id: `md-${i}`,

name: name,

level: Number(header.replace("h", "")),

});

}

}

// 最终的树结构

setNav(arr, 6);

###### 2 组装成树结构

// 采用的是从最高层级到最低层级的level进行循环遍历

function setNav(firstNav, lastLevel) {

let newList = [];

firstNav.map((nav, index) => {

if (nav.level < lastLevel && nav.level > 0) {

newList.push(nav);

} else if (nav.level == lastLevel) {

newList[newList.length - 1].children

? newList[newList.length - 1].children.push(nav)

: (newList[newList.length - 1].children = [nav]);

}

});

if (lastLevel > 2) {

lastLevel--;

// 采用递归循环所有数据

return setNav(newList, lastLevel);

} else {

return newList;

}

}

###### 3 滚动到对应位置

let element = document.getElementById(id);

element.scrollIntoView({

block: "center",

behavior: "smooth",

});

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值