热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Markodwn题目对齐的同步转动

媒介须要给正在写的Markodwn编辑器加上同步转动的功用,百度了一通,没找到比较好的思绪。就本身写了一个。Github上是写好的库,和更直观的Demo。Github这篇文章重要讲
媒介

须要给正在写的Markodwn编辑器加上同步转动的功用,百度了一通,没找到比较好的思绪。就本身写了一个。

Github上是写好的库,和更直观的Demo。
Github

这篇文章重要讲的是完成的思绪。

引见

同步转动的完成体式格局有很多种。简朴粗犷的就直接让HTMLElement.scrollTop相称,另有就是让转动条等比例转动,另有题目对齐的转动(这个是我在stackedit上看到的)。

这篇文章重要的内容是题目对齐同步转动的完成体式格局。

个人来说比较喜好题目对齐,由于这类体式格局相对于别的两个对用户更友爱。

从道理上来说题目对齐实际上是等比例转动的改良版。由于他们的中心都是经由历程盘算编辑区和预览区的高度比值决议转动的间隔。

DEMO

下面是DEMO的GIF图
《Markodwn 题目对齐的同步转动》
注重左侧的# 同步转动 同步转动

可以看到跟着转动条的挪动,摆布双方转动的间隔是差别的。

这个看起来有点像等比例转动,然则他们是不一样的,区别在等比例转动依据双方的全文高度决议转动间隔,题目对齐体式格局依据题目下内容高度决议转动间隔。

思绪

《Markodwn 题目对齐的同步转动》
上图是一张表示图:

# heading表示题目,content表示题目下面的内容。我把题目+内容称为片断(fragment)。

等比例转动我想应当比较好明白,就是经由历程盘算编辑区和预览区的高度比值,然后依据比值再盘算转动间隔。

而题目对齐要越发准确一些,它把编辑区和预览区的高度换成了题目高度+题目下内容的高度片断的高度,然后依据当前的片断对应的高度盘算转动间隔。

《Markodwn 题目对齐的同步转动》

上面的表示图中的md heighthtml height就是我们须要的片断的高度
很明显只需我们依据这两个高度的比值就可以盘算出相对应转动的间隔。

详细历程

  1. 起首须要编辑区和预览区的题目信息,数据结构以下。这里用editFragmentsInfopreFragmentsInfo替代

FragmentInfo: {
pairId, // 于编辑区/预览区相对应的题目匹配用的id
offsetTop, // 间隔顶部偏移的间隔
height // 题目加上内容的高度
}

  1. 然后须要可以猎取当前页面顶部的题目块的要领,这里用getCurrentFragment()替代
  2. 接下来要在 编辑区(editArea)/预览区(previewArea) 的转动事宜中向 预览区(previewArea)/编辑区(editArea) 发送音讯关照它要最先转动了。
  3. 在另一地区接收到以后,举行以下操纵。(假定主动转动的是编辑区,被动转动的是预览区即另一地区

    1. 先要拿到当前在顶部的题目,用上面提到的getCurrentHeading()猎取。
    2. 然后要在预览区中匹配到对应的题目。
    3. 依据双方headingInfo.height的比值盘算出的数值再加上headingInfo.offsetTop的值就是预览区的scrollTop
  4. 到此为止,一次同步就完毕了。这一历程是绑定在元素的转动事宜上的,每次转动都邑触发一次如许的历程。
同步题目

由于一个元素的转动会致使另一个元素转动,这必定会构成死循环。所以在转动事宜中一定要举行推断,防止死循环。

这是简朴的互斥要领,支撑两个以上对象的互斥
互斥锁


推荐阅读
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Cocos2dx学习笔记中的更新函数scheduleUpdate、进度计时器CCProgressTo和滚动视图CCScrollView的用法。详细介绍了scheduleUpdate函数的作用和使用方法,以及schedule函数的区别。同时,还提供了相关的代码示例。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • DOM事件大全
    1.事件:js与html的交互就是通过事件的,观察者模式2.事件流:从页面中接收事件的顺序IE::事件冒泡流,事件冒泡,事件从最具体的元素接收,然后逐级向上传播,主流浏览器都支持N ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
author-avatar
gaoyizhen92
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有