天天看點

使用marked.js實作打字效果,實時渲染markdown文檔踩坑。1、代碼塊沒有背景。因生成的HTML代碼中,&lt

使用marked.js實作打字效果,實時渲染markdown文檔踩坑。

1、代碼塊沒有背景。

因生成的HTML代碼中,<pre>元素沒有加hljs這個class,修改為<pre class="hljs">即可。

2、當html代碼與高亮代碼一起渲染時,顯示混亂。

舉例:

**圓形**:将元素的圓角半徑設定為該元素尺寸的一半,即可将其變為圓形。

```css

.demo-css-radius-eg1 { 

width: 100px; 

height: 100px; 

border-radius: 50%; 

border: 1px solid green;

}

```

<style type="text/css">

.demo-css-radius-eg1 {   

width: 100px;   

height: 100px;   

border-radius: 50%;   

border: 1px solid green;

}

</style>

<div class="demo-css-radius-eg1"></div>

可以在以上 高亮代碼 與 html代碼 之間添加 --- 作分割。

```css

.demo-css-radius-eg1 { 

width: 100px; 

height: 100px; 

border-radius: 50%; 

border: 1px solid green;

}

```

---

<style type="text/css">

.demo-css-radius-eg1 {   

width: 100px;   

height: 100px;   

border-radius: 50%;   

border: 1px solid green;

}

</style>

<div class="demo-css-radius-eg1"></div>

3、當文檔内容過長時,渲染卡頓,打字效果未展現。

如果渲染速度過快,确實會造成卡頓的問題。

處理方式同樣可以采用第2點的方式添加 --- 作分割。

同時前後端優化代碼,作出分段顯示。

前端:

if(/^\s*---/.test(event.data)){

// 遇到 --- 時,在消息氣泡下,重新添加一個消息内容子產品

initChatMessageBubble();

// 後續内容分段渲染

texts = [];

return;

}

let currentMarkDownHtml = marked.parse(texts.join(''));

/** 其它代碼 **/

output.innerHTML = currentMarkDownHtml;

後端:

| --- | ----------------- |

前端處理後,後端需要針對表格分割線單獨處理下。

也就是如果遇到分割線這行内容時,就直接傳回。

當然,這隻是其中一種方式。

優化接口的傳回資料結構,應該是最科學的。

使用marked.js實作打字效果,實時渲染markdown文檔踩坑。1、代碼塊沒有背景。因生成的HTML代碼中,&lt
使用marked.js實作打字效果,實時渲染markdown文檔踩坑。1、代碼塊沒有背景。因生成的HTML代碼中,&lt
使用marked.js實作打字效果,實時渲染markdown文檔踩坑。1、代碼塊沒有背景。因生成的HTML代碼中,&lt

繼續閱讀