时间:2021-05-08
之前本人使用React + AntDesign 实现了一个简单的时序图,但是后来有了更复杂的需求,并且要求同时展示2000个任务的展示,这就涉及到了性能问题,本人先使用React+antd+ts实现了一个基本满足下面需求的demo,但是react的渲染机制造成了较大的性能问题,利用chrome自带的Performance,测试发现demo的首次渲染高达10s以上,并且后续的操作也会使整个页面非常卡。经过思索后决定使用原声js+css+html去实现,因为原声js下性能是最优的。下面先来说说新版本的需求:
效果图
图一:
图二:
实现难点
鼠标缩放,x轴的缩放方式
鼠标缩放产生时序图X轴的缩放。时序图的缩放,在这里提供三种思路:
三种思路的优缺点:
鼠标缩放,保持以鼠标为中心,往两边放大
先放推理过程图:
// 上图解释// dom = 时序图的dom元素// domL1, domeL2 = dom.scrollLeft;// domeL1表示前一次的dom.scrollLeft;// domeL2表示当前的dom.scrollLeft;// scale 表示当前的放大的比例// scale1 表示上一次的放大比例// tree_dom.offsetWidth表示左侧树的宽度// clientX1 表示上一次的鼠标位置距离时序图左侧的距离 = e.clientX - tree_dom.offsetWidth// clientX2 表示当前鼠标位置距离时序图的距离// 以鼠标为中心的缩放,公式为:domL2 = domeL1(scale/scale1) + clientX1(scale/scale1) - e.clientX + tree_dom.offsetWidth// 公式讲解:// 1. scale/scale1表示本次的缩放比例除以上一次的缩放比例,表示当前的缩放比例// 左侧卷去的宽度在第二次缩放时也会跟着缩放,所以左侧的宽度需要乘以缩放比例// 鼠标位置距离时序图左侧的宽度在缩放时也会跟着缩放,所以也要乘以缩放比例// 最后面减去鼠标位置距离时序图左侧的实际距离就等于缩放时左侧卷去的长度// 页面代码time_box_parent.scrollLeft = (time_box_parent.scrollLeft + e.clientX - tree_box_dom.offsetWidth) * (scale_x / scale_x1) - e.clientX + tree_box_dom.offsetWidth;使用连线表示任务之间的关系
方案:
优缺点:
实现思路:
用一个变量记录每个任务的层级深度,层级深都以当前任务的父任务为起点,就是说是从哪个任务产生的当前任务,同级的子任务进行累加操作。用累加的变量按照一定的比例获取垂直连线的高度以及水平连线的top值,水平连线的长度由任务的创建时间和开始时间决定。(使用上面的宽度百分比函数)
时间单位:天、时、分、秒
这个比较简单,实现思路:
因为本demo的时间4刻度是个刻度,判断最小时间戳与最大时间戳之间的差除以4,是否还有一天的时间(60 * 60 * 24,换算成秒),从大到小的降序获取时间单位。
总结
以上所述是小编给大家介绍的原生 JS+CSS+HTML 实现时序图的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了jQuery模拟html下拉多选框的原生实现方法。分享给大家供大家参考,具体如下:用js,html,css简单的实现一个HTML下拉多选框,不试用
使用html+css+js实现简易计算器,效果图如下:html代码如下calculatorDocumentCSS代码如下:*{border:none;font-
本文实例为大家分享了原生js实现tab选项卡切换效果的代码,供大家参考,具体内容如下1.html部分时事体育娱乐时事体育娱乐2.css部分:样式部分实现方法多种
近日在群里看到有个题目,拿出来写写,要求:用html,css,原生js实现如图的效果,先正向输出,然后逆向回溯,最后停留在完整的画面。首先:HTML部分代码:就
0、效果图1、引入js、css(建议css放在html头部,js加载在html底部)2、html//上传按钮multiple为可多文件上传//保存文件路径3、初