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

首頁 > 編程 > HTML > 正文

Markodwn 標題對齊的同步滾動實現思路詳解

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

前言

需要給正在寫的Markodwn編輯器加上同步滾動的功能,百度了一通,沒找到比較好的思路。就自己寫了一個。

Github上是寫好的庫,和更直觀的Demo。

Github

這篇文章主要講的是實現的思路。

介紹

同步滾動的實現方式有很多種。簡單粗暴的就直接讓 HTMLElement.scrollTop 相等,還有就是讓滾動條等比例滾動,還有標題對齊的滾動(這個是我在 stackedit 上看到的)。

這篇文章主要的內容是標題對齊同步滾動的實現方式。

個人來講比較喜歡標題對齊,因為這種方式相對于另外兩個對用戶更友好。

從原理上來講標題對齊實際上是等比例滾動的改良版。因為他們的核心都是通過計算編輯區和預覽區的高度比值決定滾動的距離。

DEMO

下面是DEMO的GIF圖

注意左邊的 # 同步滾動 同步滾動 。

可以看到隨著滾動條的移動,左右兩邊滾動的距離是不同的。

這個看起來有點像等比例滾動,但是他們是不一樣的,區別在等比例滾動根據兩邊的 全文高度 決定滾動距離,標題對齊方式根據 標題下內容高度 決定滾動距離。

思路

上圖是一張示意圖:

# heading 表示標題, content 表示標題下面的內容。我把 標題+內容 稱為片段(fragment)。

等比例滾動我想應該比較好理解,就是通過計算編輯區和預覽區的高度比值,然后根據比值再計算滾動距離。

而標題對齊要更加精確一些,它把編輯區和預覽區的高度換成了 標題高度+標題下內容的高度 即 片段 的高度,然后根據當前的片段對應的高度計算滾動距離。

上面的示意圖中的 md height 和 html height 就是我們需要的 片段的高度 。

很明顯只要我們根據這兩個高度的比值就可以計算出相對應滾動的距離。

具體過程
 

首先需要編輯區和預覽區的標題信息,數據結構如下。這里用 editFragmentsInfopreFragmentsInfo 代替

FragmentInfo: {    pairId,         // 于編輯區/預覽區相對應的標題匹配用的id    offsetTop,      // 距離頂部偏移的距離    height          // 標題加上內容的高度}

然后需要能夠獲取當前頁面頂部的標題塊的方法,這里用 getCurrentFragment() 代替 
 

接下來要在 編輯區(editArea)/預覽區(previewArea) 的滾動事件中向 預覽區(previewArea)/編輯區(editArea) 發送消息通知它要開始滾動了。

在另一區域接收到之后,進行以下操作。(假設主動滾動的是編輯區,被動滾動的是預覽區即 另一區域 )

  1. 先要拿到當前在頂部的標題,用上面提到的 getCurrentHeading() 獲取。
  2. 然后要在預覽區中匹配到對應的標題。
  3. 根據兩邊 headingInfo.height 的比值計算出的數值再加上 headingInfo.offsetTop 的值就是預覽區的 scrollTop 。
  4. 到此為止,一次同步就結束了。這一過程是綁定在元素的滾動事件上的,每次滾動都會觸發一次這樣的過程。

同步問題

因為一個元素的滾動會導致另一個元素滾動,這必定會形成死循環。所以在滾動事件中一定要進行判斷,避免死循環。

這是簡單的互斥方法,支持兩個以上對象的互斥。
 

總結

以上所述是小編給大家介紹的Markodwn 標題對齊的同步滾動實現思路詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品久久久久久| 精品偷拍一区二区三区在线看| 亚洲а∨天堂久久精品喷水| 国产一区二区三区日韩欧美| 亚洲人成网7777777国产| 成人免费自拍视频| 精品国产鲁一鲁一区二区张丽| 高清日韩电视剧大全免费播放在线观看| 久久久噜噜噜久久| 久久久欧美精品| 亚洲成年人影院在线| 欧美裸体视频网站| 黑人巨大精品欧美一区二区| 91久久国产精品91久久性色| 国产精品一区二区女厕厕| 91久久精品国产91性色| 亚洲一区二区免费| 久久久欧美精品| 亚洲最新av在线网站| 亚洲97在线观看| 九九视频直播综合网| 亚洲欧美另类自拍| 国产精品嫩草影院一区二区| 国产精品视频中文字幕91| 亚洲男人天堂久| 精品视频在线观看日韩| 成人激情春色网| 欧美激情中文字幕在线| 国产精欧美一区二区三区| 欧美午夜www高清视频| 亚洲日本中文字幕免费在线不卡| 国产成人亚洲精品| 中文字幕国产精品久久| 亚洲片国产一区一级在线观看| 国产suv精品一区二区三区88区| 欧美视频在线免费看| 亚洲综合色av| 成人久久精品视频| 日本高清不卡的在线| 久久伊人免费视频| 国产亚洲欧洲高清一区| 伦伦影院午夜日韩欧美限制| 啊v视频在线一区二区三区| 日韩成人在线免费观看| 揄拍成人国产精品视频| 日韩精品有码在线观看| 国产ts一区二区| 国产成人精品最新| 91免费精品国偷自产在线| 亚洲欧美三级伦理| 91亚洲精品一区| 亚洲精品自产拍| 亚洲午夜性刺激影院| 高清欧美一区二区三区| 久久影院免费观看| 欧美丰满片xxx777| 国产成人精品网站| 国产亚洲一级高清| 亚洲欧洲国产一区| 国产在线高清精品| 亚洲免费小视频| 国产精品视频免费观看www| 亚洲国产精品中文| 日韩中文字幕在线视频| 中文字幕日韩高清| 日韩av网站大全| 亚洲人成伊人成综合网久久久| 欧美成人h版在线观看| 国产精品久久久久久久久免费| 欧美激情亚洲综合一区| 深夜精品寂寞黄网站在线观看| 国产精品91久久久久久| 萌白酱国产一区二区| 亚洲精品视频网上网址在线观看| 亚洲视频视频在线| 欧美日韩国产专区| 欧美午夜激情在线| 久久久久久亚洲精品不卡| 久久久久久一区二区三区| 国产91色在线播放| 17婷婷久久www| 福利视频导航一区| 久久国产精品久久久久久| 久久久久国产精品免费网站| 91亚洲国产成人精品性色| 国产欧美精品一区二区| 欧美性xxxx极品高清hd直播| 久久香蕉精品香蕉| 91精品视频在线免费观看| 成人欧美一区二区三区在线湿哒哒| 91po在线观看91精品国产性色| 国产精品福利小视频| 日韩av在线免费观看一区| 国产欧美一区二区白浆黑人| 亚洲第一中文字幕| 亚洲欧洲午夜一线一品| 中文字幕免费国产精品| 国产精品成熟老女人| 免费av在线一区| 国产欧美精品日韩精品| 久久69精品久久久久久久电影好| 国产91精品不卡视频| 国产精品99久久久久久www| 日韩国产欧美精品一区二区三区| 久久久免费观看| 国产ts一区二区| 国产成人一区二区| 色噜噜亚洲精品中文字幕| 国产精品最新在线观看| www.亚洲一二| 欧美精品一二区| 欧美日韩国产一区二区三区| 97视频在线观看免费高清完整版在线观看| 欧美精品videos另类日本| 亚洲精品一区二区三区婷婷月| 国产精品久久久91| 亚洲人成电影网站| 国产精品啪视频| 亚洲黄页网在线观看| 日韩精品中文字幕久久臀| 96精品久久久久中文字幕| 亚洲毛片在线观看.| 91精品国产91久久| 精品丝袜一区二区三区| 日韩高清电影免费观看完整版| 91精品国产乱码久久久久久久久| 色悠悠国产精品| 亚洲电影第1页| 欧美激情亚洲另类| 久久精品91久久久久久再现| 91在线免费看网站| 亚洲国产欧美在线成人app| 黑人巨大精品欧美一区二区免费| 亚洲精品乱码久久久久久金桔影视| 中文字幕综合一区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲国产精品va在线观看黑人| 北条麻妃在线一区二区| 色先锋久久影院av| 日产精品久久久一区二区福利| 成人a视频在线观看| 国产精品中文字幕在线| 亚洲人成网站免费播放| 国产在线拍偷自揄拍精品| 日韩成人在线视频观看| 日韩在线欧美在线| 美日韩精品免费观看视频| 久久99久久亚洲国产| 日韩精品欧美激情| 久久av在线播放| 国产精品1区2区在线观看| 这里精品视频免费| 久久精品在线播放| 久久久久久免费精品| 欧美性猛交99久久久久99按摩| 欧美大片免费观看在线观看网站推荐| 欧美午夜精品久久久久久浪潮| 日韩av片免费在线观看| 中文字幕国产精品| 欧美性猛交xxxx富婆弯腰| 国产成人免费av| 国产精品丝袜白浆摸在线| 久久精品99国产精品酒店日本| 国产精品第三页|