应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

markdown预览效果优化,差点哭出声的艰辛历程

5872人阅读 2020/4/8 14:05 总访问:5182823 评论:3 收藏:0 手机
分类: 前端

其实要实现的效果很简单就是想写文章的时候能即时预览效果,但是自带的会出现看不到的情况,且回车也无法改变这种现象。

熬了好多个夜晚,失败了无数次,终于有点效果了。具体细节就不说了,说说使用过的方法。

tip:就算是失败我努力去尝试了很多种方法,这个过程本身也是一种学习,也能锻炼思维能力和解决问题的能力。失败不可怕,最可怕的是还没有去尝试就觉得自己不行。好几次都想放弃,但是想到一句话:我那么勇敢,你怎么舍得让我输。就继续了

尝试过的方法简单说一下(也许看着不多,但是这期间不断的思考新方法,又不断的被打脸,只有自己能体会是多么想砸鼠标):

1:让br在预览中起效果,失败

2:滚动事件,同步高度失败(预览的高度通常比编写markdown语法高,所以同步高度并不科学)

3:回车键插入br失败(会被重写,渲染一遍,这种方法其实也是可行的,需要修改源码,当时觉得修改源码很麻烦就像另外的方法了)

4:根据行号计算高度失败,当时想到这个方法觉得自己思维真的还不错,这样高度就可以动态的来了

   但是呢,根据行号计算其实可能计算的高度比实际高度还低所以会出现两个滚动条,在实践的时候发现也不是太科学

5:计算空格数,然后在原来内容的高度上加上空格数*行高,哈哈哈,每次想到一个新方法都觉得自己想法真多,但是每次都会被泼冷水

  差点哭出声。这种方法其实也是比较科学可行的,主要是原来内容的实际高度把设定的  ,高度破坏掉了,获取原来的高度会有问题

6:解决方法5中的:获取原来的高度会有问题,用了一个还算比较巧妙的方法,先设置高度为auto,css("height", "auto")也就是高度自适应内容在获     取这样确实能解决了(当然期间还纠结了其他方法的)!很兴奋的去尝试,but还是有点问题,但是很接近成功了,后面发现这种写法也是可行的

7:通过空格数,动态计算padding-bottom值,具体心路历程就不说了,太坑了

   监听滚动事件:

  1. onscroll: function (event{
  2.     if ($(".CodeMirror-vscrollbar").scrollTop() == 0) {
  3.         $(".editormd-preview").scrollTop(0);
  4.     }
  5.     else {
  6.        //让预览的高一点,加上markdown编写的空格所占的高度
  7.        $(".editormd-preview").scrollTop($(".CodeMirror-vscrollbar").scrollTop()+$('[cm-text]').length * 22);
  8.     }
  9. },

   然后监听回车和返回键:

  1. $("#article-editormd").keyup(function (result{
  2.     if (result.keyCode == 13||result.keyCode==8)
  3.     {       
  4.         //方法5直接动态设置预览padding-bottom
  5.         $(".editormd-preview-container").css("cssText","padding-bottom:"+$('[cm-text]').length * 22+"px!important;")
  6.         //动态调整滚动条高度
  7.         $(".editormd-preview").scrollTop($(".CodeMirror-vscrollbar").scrollTop()+$('[cm-text]').length * 22);
  8.     }
  9. });

但是这样还是有问题,就是默认输入的时候他自带的会跳转滚动条高度,和我这个冲突了,需要把自带监听的事件干掉才行,所以还是要分析源码,被逼无赖,这个过程就不说了,首先得解压Js,不然你是看不了的,解压js然后在慢慢分析,一个js里边几千行也得需要一些耐心,开始以为内部也是监听的keydown或者keyup,讲 过不断的尝试终于发现居然是监听的change事件,好吧,try , you can !

把这个padding自己随便修改一个属性即可不影响我们的值


经过不断的尝试,总算是达到了一些自己想要的效果,剩下的在实践中在不断的调整吧

代码很好玩,只是觉得头冷;我那么勇敢,你怎么舍得让我输!


在优化又搞纠结了很多哇

把滚动事件里边跳转预览滚动条高度,换成这样更好一点

  1. //应该是在他本身的滚动高度上在加而不是左边的框框
  2. $(".editormd-preview").scrollTop($(".editormd-preview").scrollTop() + $('[cm-text]').length * 22);

哎,其实很简单就是,让空格数来添加预览div的padding-bottom值,然后把右边滚动条的滚动距离相比左边调整下来一些即可。只是这里边会涉及到很多东西,要跳转好这些东西不让他们相互影响






欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

剑轩

2020/4/8 14:40:43

嘿,自己踩一下

瑾语:@剑轩加油ヾ(◍°∇°◍)ノ゙

2020/11/26 15:39:19 回复

剑轩:@瑾语干巴得ヾ(◍°∇°◍)ノ゙

2020/11/26 15:46:15 回复

使用markdown编辑器editormd图片上传

静态资源路径问题可以参考:https://www.tnblog.net/aojiancc2/article/details/3436自定义工具栏可以参考:https://www.tn...

markdown转HTML的显示处理

数据库保存转化好的html格式,前台直接显示" class="reference-link">方法1 : 数据库保存转化好的html格式,前台直接显示m...

扩展markdown增加mermaid支持画图

我看网上没有什么资料,只有说怎么去用它,没有说怎么才能用它。那就自己慢慢研究在让markdown支持,要自己实现这个必须要...

.NETCore配置markdown的学习之路 (一)

前言MarkDown讲述 (开始使用)现在很多人都自己开发一个博客平台分享技术,老程序员都说干程序员如果没有开发出来一个...

tnblog markdown画图

tnblog画图graph LR;   A-->B;   A-->C;   B-->D;sequenceDiagram participant Alice participant Bob ...

关于tnblog markdown

我们对markdown进行了深度的优化和高度的自定义功能比如更人性化的即时预览效果扩展语法等并且持续不断的完善优化中tnlog m...

Asp.NET使用markdown上传图片

初始化富文本编辑器就不写了,初学者去看这篇文章.NETCore配置MarkDown的学习之路 (一)前台代码配置imageUploadURL属性并且...

markdown中mermaid画图解析失败

报错:Parse error on line 17:...ockquote><h3 id="h3-u6570u5B57u8BA4u8BC其实就是htmlDecode的配置问题,就...

markdown编辑器editormd设置内容获取内容追加内容

这些东西网上搜半天都搜不到,只有自己分析源码了,所以还是要靠自己。找到下面4个方法。可以参考一下。 setMarkdown,set...

XAF生成markdown

usingDevExpress.ExpressApp.DC; usingDevExpress.ExpressApp.Model; usingDevExpress.Persistent.Validation; usingJGS...

markdown语法示例

[TOC]Markdown简介 Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的H...

markdown常用语法

MarkDown 一些语法删除线~~content~~ Content # 任务清单- [x] Checked - [ ] ReChecked Checked[ ] ReChecked...

editormdmarkdown 自定义导航栏按钮

editormd,markdown 自定义导航栏按钮可以通过修改源代码来实现,但是没有必要那么麻烦。 editormd本身就有增加自定义按钮...

markdowneditormd编辑器Editor.md自动保存插件的开发

简介: Markdown编辑器Editor.md自动保存插件的开发。文章编辑器没有自动保存功能怎么行,万一不小心忘记保存不就辛苦白费了...

editormdmarkdown编辑器Editor.md图片粘贴插入插件的开发

Markdown编辑器Editor.md图片粘贴插入的开发。最近发现编辑器图片上传很不方便,不能像其他编辑器一样粘贴插入图片,就着手...