视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001 知道1 知道21 知道41 知道61 知道81 知道101 知道121 知道141 知道161 知道181 知道201 知道221 知道241 知道261 知道281
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
纯前端技术做实时预览的markdown编辑器
2020-11-27 20:01:25 责编:小采
文档
这次给大家带来纯前端技术做实时预览的markdown编辑器,用纯前端技术做实时预览的markdown编辑器的注意事项有哪些,下面就是实战案例,一起来看一下。

第一步 搭建布局:
1.构思布局(以下是总体布局)

2.项目下新建个index.html页面,写入以下代码:

<!DOCTYPE html><html>
 <head>
 <meta charset="UTF-8">
 <title>markdown编辑器</title>
 <style type="text/css">
 * { margin: 0; padding: 0; outline: none; border-radius: 0;
 } 
 html, body { width: 100%; height: 100%; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: #ebebeb;
 } #toolbar { height: 50px; background-color: #444; width: 100%; color: #fff; line-height: 50px;
 } #container { overflow: auto; position: absolute; bottom: 0; left: 0; right: 0; top: 50px;
 } #editor-column, #preview-column { width: 49.5%; height: 100%; overflow: auto; position: relative; background-color: #fff;
 } .pull-left { float: left;
 } 
 .pull-right { float: right;
 } </style>
 </head>
 <body>
 <div id="toolbar"></div>
 <div id="container">
 <div id="editor-column" class="pull-left">
 <div id="panel-editor">
 </div>
 </div>
 <div id="preview-column" class="pull-right">
 <div id="panel-preview">
 </div>
 </div>
 </div>
 </body></html>

效果预览

第二步 引入资源实现初步效果:
1.项目下创建js文件夹
2.解从下载好的压缩包解marked/lib下的marked.js到js文件夹
3.解从下载好的压缩包解ace-builds/src到js文件夹重命名为ace
4.引入js文件
(注:markdown.css是markdown样式文件,可以自行编写或从网上下载 比如:github-markdown-css)

<!DOCTYPE html><html> 
 <head>
 <meta charset='UTF-8'>
 <title>markdown编辑器</title>
 <script src="js/jquery-2.1.4.min.js"></script>
 <script src="js/marked.js"></script> 
 <script src="js/ace/ace.js"></script>
 <link href="markdown.css" rel="stylesheet" />
 <!--略-->

5初始化插件

(先添加编辑区和显示区代码)

<!--略-->#mdeditor,#preview,#panel-editor,#panel-preview{
 height: 100%;
 width: 100%;
 } </style>
 </head>
 <body>
 <div id='toolbar'></div>
 <div id='container'><div id='editor-column' class='pull-left'>
 <div id='panel-editor'>
 <!--编辑区-->
 <div class="editor-content" id="mdeditor" ></div>
 </div> 
 </div>
 <div id='preview-column' class='pull-right'>
 <div id='panel-preview'>
 <!--显示区-->
 <div id="preview" class="markdown-body"></div>
 </div>
 </div> 
 <!--略-->

(先添加初始化代码)

<!--略--><script>
 var acen_edit = ace.edit('mdeditor'); 
 acen_edit.setTheme('ace/theme/chrome');
 acen_edit.getSession().setMode('ace/mode/markdown');
 acen_edit.renderer.setShowPrintMargin(false);
 $("#mdeditor").keyup(function() {
 $("#preview").html(marked(acen_edit.getValue()));
 }); </script>
 </body></html>

效果预览

第三步 添加工具到工具栏示例:

1.编写公用方法
(其实点击工具主要是在编辑器里自动插入本来手打的符号)

function insertText(val){
 acen_edit.insert(val);//光标位置插入
 }
<div id='toolbar'>
 <button onclick="insertText('**?**')">加粗</button>
 <button onclick="insertText('_?_')">斜体</button>
 <button onclick="insertText('>')">引用</button>
 ..... </div>

第四步 ace.js API 实现编辑器设置功能:

<div id='toolbar'>
 <button onclick="insertText('**?**')">加粗</button>
 <button onclick="insertText('_?_')">斜体</button>
 <button onclick="insertText('>')">引用</button>

设置:

<select id="theme" size="1">
 <optgroup label="Bright">
 <option value="ace/theme/chrome">Chrome</option>
 <option value="ace/theme/clouds">Clouds</option>
 <option value="ace/theme/crimson_editor">Crimson Editor</option>
 <option value="ace/theme/dawn">Dawn</option>
 <option value="ace/theme/dreamweaver">Dreamweaver</option>
 <option value="ace/theme/eclipse">Eclipse</option>
 <option value="ace/theme/github">GitHub</option>
 <option value="ace/theme/iplastic">IPlastic</option>
 <option value="ace/theme/solarized_light">Solarized Light</option>
 <option value="ace/theme/textmate">TextMate</option>
 <option value="ace/theme/tomorrow">Tomorrow</option>
 <option value="ace/theme/xcode">XCode</option>
 <option value="ace/theme/kuroir">Kuroir</option>
 <option value="ace/theme/katzenmilch">KatzenMilch</option>
 <option value="ace/theme/sqlserver">SQL Server</option>
 </optgroup>
 <optgroup label="Dark">
 <option value="ace/theme/ambiance">Ambiance</option>
 <option value="ace/theme/chaos">Chaos</option>
 <option value="ace/theme/clouds_midnight">Clouds Midnight</option>
 <option value="ace/theme/cobalt">Cobalt</option>
 <option value="ace/theme/gruvbox">Gruvbox</option>
 <option value="ace/theme/idle_fingers">idle Fingers</option>
 <option value="ace/theme/kr_theme">krTheme</option>
 <option value="ace/theme/merbivore">Merbivore</option>
 <option value="ace/theme/merbivore_soft">Merbivore Soft</option>
 <option value="ace/theme/mono_industrial">Mono Industrial</option>
 <option value="ace/theme/monokai">Monokai</option>
 <option value="ace/theme/pastel_on_dark">Pastel on dark</option>
 <option value="ace/theme/solarized_dark">Solarized Dark</option>
 <option value="ace/theme/terminal">Terminal</option>
 <option value="ace/theme/tomorrow_night">Tomorrow Night</option>
 <option value="ace/theme/tomorrow_night_blue">Tomorrow Night Blue</option>
 <option value="ace/theme/tomorrow_night_bright">Tomorrow Night Bright</option>
 <option value="ace/theme/tomorrow_night_eighties">Tomorrow Night 80s</option>
 <option value="ace/theme/twilight">Twilight</option>
 <option value="ace/theme/vibrant_ink">Vibrant Ink</option>
 </optgroup>
 </select>
 字体大小 <select id="fontsize" size="1">
 <option value="10px">10px</option>
 <option value="11px">11px</option>
 <option value="12px" selected="selected">12px</option>
 <option value="13px">13px</option>
 <option value="14px">14px</option>
 <option value="16px">16px</option>
 <option value="18px">18px</option>
 <option value="20px">20px</option>
 <option value="24px">24px</option>
 </select> 
 代码折行 <select id="folding" size="1">
 <option value="manual">manual</option>
 <option value="markbegin" selected="selected">mark begin</option>
 <option value="markbeginend">mark begin and end</option>
 </select>
 自动换行 <select id="soft_wrap" size="1">
 <option value="off">Off</option>
 <option value="40">40 Chars</option>
 <option value="80">80 Chars</option>
 <option value="free">Free</option>
 </select>
 全选样式<input type="checkbox" name="select_style" id="select_style" checked=""> 
 光标行高光<input type="checkbox" name="highlight_active" id="highlight_active" checked="">
 显示行号<input type="checkbox" id="show_gutter" checked=""> 
 打印边距<input type="checkbox" id="show_print_margin" checked="">
 </div><!---略--->......
 $("#theme").change(function() {
 acen_edit.setTheme($(this).val());
 })
 $("#fontsize").change(function() {
 acen_edit.setFontSize($(this).val());
 }) 
 $("#folding").change(function() {
 session.setFoldStyle($(this).val());
 })
 $("#select_style").change(function() {
 acen_edit.setOption("selectionStyle", this.checked ? "line" : "text");
 })
 $("#highlight_active").change(function() {
 acen_edit.setHighlightActiveLine(this.checked);
 })
 $("#soft_wrap").change(function() {
 acen_edit.setOption("wrap", $(this).val());
 })
 $("#show_print_margin").change(function() {
 acen_edit.renderer.setShowPrintMargin(this.checked);

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

相关阅读:

用nodejs做简介的网站

怎样用JS编写模拟器

如何在移动端做出1px边框的效果

下载本文
显示全文
专题