预览
这个项目灵感来自 strml.net 不过它的源码不是很懂但是知道大概思路我们可以用纯 js 来实现,代码实现是简单的,可是能想出这样灵感的人是令人敬佩的。
代码写在页面上
代码出现在页面上肯定是用 js 修改 html
在 js 中准备好代码 string
由于代码是一个字一个字的出现的,肯定时会用到 setInterval
每一次多取 string 一个字母
1 2 3 4 5 6 7 8 9 10 11 12
| function writeCode(code){ let n = 0 let domCode = document.querySlecelt('.xxx') let timer = srtInterval(() => { domCode.innerHTML = code.substring(0, n) if(n === code.length){ clearInterval(timer) } n++ }, 30) }
|
代码高亮
css 仿造 html 一样加在 style 标签中(中文使用注释)
我们当然不需要自己去词法分析(其实是我做不来),网上有现成的
使用 Prism
根据官网使用就好哈,下载的时候记得勾选 markdown 后面需要
Prism 其实是在关键词周围加上 span 标签,而我们应该如何制造一种我们加高亮的假象呢?当然就是先将样式提前修改后面再加上就好了。
后面在代码优化就可以得到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function writeCode(precode, code, callback) { let pcode = precode || '' let Domcode = document.querySelector('#code') let n = 0 let timer = setInterval(() => { Domcode.innerHTML = Prism.highlight(pcode + code.substring(0, n), Prism.languages.css, 'css'); styleTag.innerHTML = result = pcode + code.substring(0, n) let now = code.substring(n + 1, n) pressKey(now); Domcode.scrollTop = Domcode.scrollHeight if (n === code.length) { window.clearInterval(timer) callback && callback.call() } n++ }, 30) }
|
HTML –> markdown
当然我们也没必要自己去写
markedjs
依然是按着官网走就好
CALLBACK
1 2 3 4 5 6 7 8 9 10 11 12
| writeCode('', css1, () => { creatPaper(() => { writeCode(css1, css2, () => { writeMarkdown(md, () => { writeCode(css1+css2, css3, () => { document.querySelector('#paper .content').innerHTML = marked(md); console.log('over') }) }) }) }) })
|
由于最近看了回调,所以就在这一次使用了。
不过一般还是不要这样写,至少我实现知道咋回事过段时间这就是天书了hahahahaha
下次用 Promise 改改?