编辑器的缩略图实现原理

这篇具有很好参考价值的文章主要介绍了编辑器的缩略图实现原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

部分 Web 版的 IDE 编辑器未曾实现缩略图功能,探寻一下缩略图的实现逻辑。以 VSCode 为例。

VSCode 的编辑器是monaco实现的,编辑器的编辑区都是采用的虚拟渲染,即仅渲染可视区的代码,可视区之外的动态去除 DOM 节点。

打开 VScode > Help > Toggle Developer Tools,观察 DOM 节点的状态变化,可以看到是在动态变化。

二、功能特性

参照 VSCode 的缩略图的能力,功能包括:

  1. 滚动。缩略图与编辑器的滚动同步
  2. 拖拽。缩略图中的滑块拖拽功能
  3. 点击。缩略图的非滑块区域,通过点击操作定位到对应的代码位置

其它的特性:

  1. 代码量多的场景下,缩略图中展示的是全量代码中的部分
  2. 代码量多的场景下,滚动时,缩略图中的代码与滑块是同时在滚动的

三、方案设计

编辑器的缩略图实现原理,编辑器,缩略图,minimap

假设:

  • 编辑器的屏高为 1,缩略图中展示的最大代码量为 N 屏的代码,代码总量为 M。
  • 能够拿到编辑器的全量代码

整体设计:

(一) 滚动同步问题

主要处理两个场景:

  • 编辑器滚动事件
  • 缩略图滚动事件

1.1 编辑器滚动事件

当编辑器滚动时,变更缩略图中代码块偏移位置,以及滑块位置。

具体的,缩略图中的代码块、滑块偏移距离,使用编辑器的滚动百分比进行计算。

核心思路:缩略图中滑块移动的百分比 = 缩略图中代码移动的百分比 = Ace Editor 垂直滚动条移动的百分比

1.2 缩略图滚动事件

为缩略图注册wheel事件,当触发事件时,动态变更编辑器的滚动位置即可

(二)缩略图点击事件

当在缩略图中触发点击事件时,假设鼠标点击位置到滑块左上角的垂直距离 为 Dy

D y = 滑块的相对偏移高度 + 滑块的相对偏移高度 滑块可偏移高度 × 缩略图中代码块可偏移高度 Dy = 滑块的相对偏移高度 + \frac{滑块的相对偏移高度}{滑块可偏移高度} \times 缩略图中代码块可偏移高度 Dy=滑块的相对偏移高度+滑块可偏移高度滑块的相对偏移高度×缩略图中代码块可偏移高度

从上述的公式中,可以计算出滑块的相对偏移高度,然后即可得出滚动的百分比。

因为,编辑器的滚动百分比 = 缩略图滑块偏移百分比 = 缩略图代码块偏移百分比,此时设置编辑器的滚动高度即可。

四、方案优化

此时缩略中的实现是基于全量代码,渲染所有的代码,通过移动缩略图中的代码实现。

可以将代码块这部分修改为动态渲染,知道了滚动百分比,即可计算出需要渲染的开始行。在知道行高的情况下,计算出结束行。进而实现动态渲染。文章来源地址https://www.toymoban.com/news/detail-704502.html

五、引用

  • [^1] https://ace.c9.io/
  • [^2] https://github.com/ajaxorg/ace/wiki/Configuring-Ace
  • [^3] https://marvinsblog.net/post/2022-04-16-web-minimap/
  • [^4] https://larsjung.de/pagemap/

到了这里,关于编辑器的缩略图实现原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • qt+opencv实现图片编辑器

    借助QLabel容器,进行显示图片作为背景,然后重写QLabel类实现矩形,直线和圆形的实现。opencv板块直接实现相关图片操作。 打开图片 裁切 改变亮度和对比度 顺时针旋转和逆时针旋转 重写的QLabel

    2024年02月16日
    浏览(35)
  • threejs(6)-操控物体实现家居编辑器

    2024年02月07日
    浏览(116)
  • uniapp 实现富文本编辑器【小程序端】

    css资源文件戳该链接:富文本css文件链接 编辑菜单我搞成吸顶效果了,方便手机编辑不用再滑到头部点编辑菜单:css实现元素吸顶效果 ————————————————————————————————————————————

    2024年02月16日
    浏览(50)
  • GLTF编辑器实现逼真的石门模型

    在线工具推荐: 3D数字孪生场景编辑器  -  GLTF/GLB材质纹理编辑器  -  3D模型在线转换  -  Three.js AI自动纹理开发包  -  YOLO 虚幻合成数据生成器  -  三维模型预览图生成器  -  3D模型语义搜索引擎 在凹凸贴图中,每个像素点都包含了一个法线向量,表示该点表面的方向。

    2024年02月03日
    浏览(33)
  • 用odin实现的资源复制编辑器

    用odin实现了一个资源复制编辑器,使用要安装odin,功能是把要复制的资源路径一个个添加设置,点copy能把列表里的资源全部复制,支持目录复制到目录,文件复制到目录,文件复制替换。提升效率,让自己有更多的时间研究其他东西或者休息,需要注意的是只有一个目标路

    2024年04月16日
    浏览(39)
  • GLTF编辑器-位移贴图实现破碎的路面

    在线工具推荐: 3D数字孪生场景编辑器  -  GLTF/GLB材质纹理编辑器  -  3D模型在线转换  -  Three.js AI自动纹理开发包  -  YOLO 虚幻合成数据生成器  -  三维模型预览图生成器  -  3D模型语义搜索引擎 位移贴图是一种可以用于增加模型细节和形状的贴图。它能够在渲染时针对

    2024年02月03日
    浏览(32)
  • 织梦dedecms默认编辑器实现上传视频功能

    织梦默认的编辑器采用的是ckeditor厂商提供的,只可以上传Flash,今天我们进行二次改进,使之可以上传视频文件如MP4文件进行播放,方法比较简单,无需去更换编辑器,下面就言归正传。 第一步:后台系统–添加MP4扩展名 登录后台–系统基本参数–附件设置–允许的多媒体

    2024年02月03日
    浏览(33)
  • GLTF 编辑器实现逼真3D动物毛发效果

    在线工具推荐: 3D数字孪生场景编辑器  -  GLTF/GLB材质纹理编辑器  -  3D模型在线转换  -  Three.js AI自动纹理开发包  -  YOLO 虚幻合成数据生成器  -  三维模型预览图生成器  -  3D模型语义搜索引擎 要实现逼真的3D动物毛发效果,可以采用以下技术和方法: 毛发建模:使用

    2024年02月03日
    浏览(36)
  • 瓦片地图编辑器——实现卡马克卷轴的编辑,键盘控制游戏移动和鼠标点击游戏编辑通过同一个视口实现。

      左边是游戏地图编辑区,右边是地图缓冲区,解决了地图缓冲区拖动bug,成功使得缓冲区可以更新。 AWSD进行移动 鼠标左右键分别是绘制/拖动 按F1健导出为mapv3.txt F2清空数组 打印的是游戏数组 easyx开发devcpp 5.11 easyx20220922版本

    2024年01月25日
    浏览(60)
  • Unity编辑器实现对选中物体一键替换材质

           最近美术同事在整理模型动画时有一个需求,就是选中部分的模型一件将材质替换成同一个材质球。在编辑器下将这个功能实现了出来。代码放在最后,简单记录一下。 首先对选中进行遍历,拿到所有的子对象; 对每个具体的对象拿到对应的 Mesh Renderer 组件; 对每

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包