亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

原生 JS+CSS+HTML 實現時序圖的方法

2024-08-26 00:21:37
字體:
來源:轉載
供稿:網友

之前本人使用React + AntDesign 實現了一個簡單的時序圖,但是后來有了更復雜的需求,并且要求同時展示2000個任務的展示,這就涉及到了性能問題,本人先使用React+antd+ts實現了一個基本滿足下面需求的demo,但是react的渲染機制造成了較大的性能問題,利用chrome自帶的Performance,測試發現demo的首次渲染高達10s以上,并且后續的操作也會使整個頁面非常卡。經過思索后決定使用原聲js+css+html去實現,因為原聲js下性能是最優的。下面先來說說新版本的需求:

  • 左側以樹形結構展示任務,可折疊
  • 右側展示任務運行所耗時間的長度
  • 需要用線條鏈接任務之間的關系
  • 右側可縮放查看詳細的任務狀態
  • 縮放時圖形保持以鼠標為中心向兩端成一定比例放大,放大時里面的文字描述不受影響
  • 圖形縮放時表示任務耗時的時間以及坐標需要跟隨圖像放大的比例進行相應變化
  • 鼠標在時序圖上移動時出現一根線條提示當前的時間以及信息

效果圖

圖一:

JS,CSS,HTML,時序圖
 

圖二:

JS,CSS,HTML,時序圖

實現難點

鼠標縮放,x軸的縮放方式

鼠標縮放產生時序圖X軸的縮放。時序圖的縮放,在這里提供三種思路:

  1. 做數據截取,按照一定的算法截取前后的數據,然后重新渲染整個頁面
  2. 利用css3的scaleX對時序圖的dom做縮放
  3. 實際改變時序圖dom的width,里面的任務運行的長度,連接線條的長度,任務運行預計需要的時長都以百分比顯示。

三種思路的優缺點:

  1. 優點:不需要去操作dom的css屬性,之間重新渲染,比較方便。缺點:對于使用dom重繪,耗費性能嚴重,大量任務渲染時性能很慢。
  2. 優點:只需改變dom的css,加載快,較流程。缺點:計算麻煩,使用過scaleX的小伙伴會發現當我X軸放大時垂直連接線會變寬,字體會橫向拉伸,都需要去反向縮小。
  3. 優點:加載快,很流暢,一次計算好元素所占寬度的占百分比,后面的操作都不需要去計算。缺點:使用百分比計算會有一定誤差,放大到一定程度會看的出來。(綜合考慮,本人采用的是第三種)
// 計算寬度百分比的函數// endTime: 任務的結束時間// startTime: 任務的開始時間// maxTime: 所有任務結束時間最大的值// minTime: 所有任務開始時間最小的值// time: 所有任務開始時間與結束時間的排序 升序// task_width: 任務的長度、水平連接線的長度、垂直連接線的left值const widthFun = function (endTime, startTime, maxTime, minTime) {    const task_width =    (((Number (endTime) - Number (startTime)) /    ((maxTime || time[time.length - 1]) - (minTime || time[0])) *    (body_width - tree_box_dom.offsetWidth)) / dom.offsetWidth)*100;    return task_width> 100 ? 100 : task_width;  };

鼠標縮放,保持以鼠標為中心,往兩邊放大

先放推理過程圖:

JS,CSS,HTML,時序圖

// 上圖解釋// 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;

使用連線表示任務之間的關系

方案:

  1. 采用的時css3 + js + html5,用偽元素繪制。
  2. 用dom包裹直角圖片,設置其位置及高度。
  3. 用標簽繪制
     

優缺點:

  1. 優點:不會增加多余的標簽,對渲染有利。缺點:父任務產生了多個子任務,不好添加偽類及設置偽類的高度及寬度。
  2. 優點:方便,只要計算子任務距父任務的高度即可。缺點:任務過多時圖片會非常多,很影響性能
  3. 優點:單獨控制每個元素的高度及位置,可控性高,可添加反饋色。缺點:添加了較多的元素,對渲染產生影響(本人使用的是第三種,這是一個笨方法,有更好方法的大佬,可以提供建議,多謝)

實現思路:

用一個變量記錄每個任務的層級深度,層級深都以當前任務的父任務為起點,就是說是從哪個任務產生的當前任務,同級的子任務進行累加操作。用累加的變量按照一定的比例獲取垂直連線的高度以及水平連線的top值,水平連線的長度由任務的創建時間和開始時間決定。(使用上面的寬度百分比函數)

時間單位:天、時、分、秒

這個比較簡單,實現思路:

因為本demo的時間4刻度是個刻度,判斷最小時間戳與最大時間戳之間的差除以4,是否還有一天的時間(60 * 60 * 24,換算成秒),從大到小的降序獲取時間單位。

總結

以上所述是小編給大家介紹的原生 JS+CSS+HTML 實現時序圖的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品免费福利| 欧美专区日韩视频| 精品成人国产在线观看男人呻吟| 成人网在线视频| 欧美成人精品在线| 久精品免费视频| 亚洲国产91精品在线观看| 亚洲欧美中文日韩v在线观看| 亚洲女人初尝黑人巨大| 中文字幕自拍vr一区二区三区| 国产自摸综合网| 精品国产欧美一区二区五十路| 色综合91久久精品中文字幕| 日韩精品中文字幕久久臀| 国产精品jvid在线观看蜜臀| 国内精品400部情侣激情| 欧美日韩亚洲一区二区三区| 欧美黄色免费网站| 亚州欧美日韩中文视频| 中文字幕亚洲欧美日韩高清| 97国产真实伦对白精彩视频8| 91欧美精品成人综合在线观看| 日韩在线高清视频| 一个人看的www久久| 中文字幕日韩专区| www.国产精品一二区| 精品电影在线观看| 18久久久久久| 国产精自产拍久久久久久蜜| 91久久精品国产91久久性色| 欧美成人激情图片网| 久久久精品久久| 久久精品电影网站| 亚洲最新av在线| 7m第一福利500精品视频| 久久激情视频免费观看| 国产精品夜色7777狼人| 久久久成人av| 欧美久久久精品| 亚洲精品美女在线观看| 97国产一区二区精品久久呦| 九九久久国产精品| 中文字幕九色91在线| 青青a在线精品免费观看| 亚洲精品ady| 在线观看欧美日韩国产| 国产99久久精品一区二区| 91久久久在线| 亚洲成人在线网| 欧美国产中文字幕| 在线亚洲男人天堂| 欧美激情免费在线| 高清视频欧美一级| 欧美电影免费观看| 国产日韩在线看片| 国产欧美日韩专区发布| 奇米影视亚洲狠狠色| 国产成人综合一区二区三区| 久久久精品一区二区三区| 狠狠躁夜夜躁人人躁婷婷91| 91亚洲永久免费精品| 亚洲精品www久久久| 国产精品88a∨| 人妖精品videosex性欧美| 国产91精品不卡视频| 日韩一区二区精品视频| 国产精品视频一区二区三区四| 欧美多人爱爱视频网站| 91手机视频在线观看| 91精品国产高清自在线| 久久在线免费观看视频| 国产国产精品人在线视| 国产欧美一区二区三区在线看| 日韩久久精品成人| 亚洲国产私拍精品国模在线观看| 成人免费在线视频网站| 国产欧美日韩免费看aⅴ视频| 主播福利视频一区| 久久人人看视频| 国产999精品久久久影片官网| 日韩av在线网址| 国产成人综合一区二区三区| 欧美国产日韩中文字幕在线| 亚洲精品久久久久久久久久久久| 日韩精品视频免费专区在线播放| 97在线日本国产| 亚洲人成电影在线| 亚洲美女又黄又爽在线观看| 欧美老肥婆性猛交视频| 91中文在线观看| 欧美另类在线播放| 日韩久久免费视频| 亚洲国产免费av| 亚洲国产精品视频在线观看| 亚洲日韩中文字幕在线播放| 一区二区三区国产视频| 亚洲成人在线网| 亚洲天堂男人天堂女人天堂| 亚洲国产日韩欧美在线99| 欧美成人免费一级人片100| 疯狂做受xxxx欧美肥白少妇| 日韩亚洲国产中文字幕| 欧美一级黑人aaaaaaa做受| 日韩有码视频在线| 81精品国产乱码久久久久久| 欧美有码在线观看视频| 亚洲第一精品自拍| 亚洲黄色在线看| 中文字幕亚洲图片| 国产亚洲美女久久| 美女久久久久久久久久久| 国产91精品高潮白浆喷水| 国产精品女主播| 国产成人精品视频| 欧美中文在线观看| 91精品视频免费看| 久久久天堂国产精品女人| 日韩在线视频网站| 亚洲高清不卡av| 日韩最新中文字幕电影免费看| 国产欧美日韩视频| 欧美理论片在线观看| 日本久久久久久久久久久| 日韩高清电影免费观看完整| 成人一区二区电影| 欧美日本高清视频| 欧美成人在线免费| 亚洲激情国产精品| 欧美插天视频在线播放| 日韩欧美中文字幕在线观看| 亚洲天堂免费视频| 狠狠躁夜夜躁久久躁别揉| 精品国产福利在线| 欧美成人国产va精品日本一级| 色综合久久88色综合天天看泰| 国产综合在线观看视频| 国产精品高潮呻吟视频| 国模吧一区二区| 中文字幕日韩欧美精品在线观看| 国产日韩欧美电影在线观看| 国产亚洲精品综合一区91| 精品国内产的精品视频在线观看| 黑人精品xxx一区| 欧美人与性动交| 精品无码久久久久久国产| 亚洲欧美日韩天堂| 国产一区二区三区精品久久久| 精品久久久香蕉免费精品视频| 久久综合久中文字幕青草| 国产第一区电影| 日韩中文字幕免费视频| 国产丝袜一区二区三区免费视频| 成人信息集中地欧美| 亚洲免费影视第一页| 亚洲国产精久久久久久| 久久中文字幕国产| 91高清视频在线免费观看| 国产成一区二区| 国产深夜精品福利| 亚洲欧美中文日韩v在线观看| 国产精品白丝av嫩草影院| 青青在线视频一区二区三区| 韩国三级日本三级少妇99| 按摩亚洲人久久|