博客園:《從零開始, 開發(fā)一" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > 從零開始,開發(fā)一個(gè) Web Office 套件(15):拖動邊框,平移編輯器

從零開始,開發(fā)一個(gè) Web Office 套件(15):拖動邊框,平移編輯器

時(shí)間:2023-05-26 03:36:01 | 來源:網(wǎng)站運(yùn)營

時(shí)間:2023-05-26 03:36:01 來源:網(wǎng)站運(yùn)營

從零開始,開發(fā)一個(gè) Web Office 套件(15):拖動邊框,平移編輯器:
這是一個(gè)系列博客,最終目的是要做一個(gè)基于 HTML Canvas 的、類似于微軟 Office 的 Web Office 套件(包括:文檔、表格、幻燈片……等等)。
博客園:《從零開始, 開發(fā)一個(gè) Web Office 套件》系列博客目錄
富文本編輯器 Github repo 地址:https://github.com/zhaokang555/canvas-text-editor
富文本編輯器 在線 Demo:https://zhaokang555.github.io/canvas-text-editor/

2. 富文本編輯器(MVP)

2.28 Feature:拖動邊框,平移編輯器

2.28.1 算法

  1. 新建一個(gè)類DragZone, 用來監(jiān)聽鼠標(biāo)拖動的距離:
    1. 拖動開始時(shí),記錄拖動起始位置;
    2. 每一段拖動結(jié)束(mousemove觸發(fā)一次),將拖動的距離記為dx, dy;
    3. 重置拖動起始位置。
  2. 每當(dāng)鼠標(biāo)拖動邊框一定距離時(shí),就把編輯器的位置平移同樣的距離;
  3. 平移編輯器之后,要把編輯器內(nèi)的子元素同時(shí)平移:
    1. 對編輯器內(nèi)的字符重新排版,計(jì)算每個(gè)字符的位置相關(guān)信息;
    2. 把編輯器的邊框移動相同的距離;
    3. 把編輯器的控制點(diǎn)移動相同的距離;
    4. 重新計(jì)算光標(biāo)的位置。



2.28.2 實(shí)現(xiàn)

在實(shí)現(xiàn)算法的同時(shí),我們做一些重構(gòu)。對之前的一些類名做一些修改:

新建一個(gè)類DragZone, 用來監(jiān)聽鼠標(biāo)拖動的距離(記為dx, dy):





每當(dāng)鼠標(biāo)拖動邊框一定距離時(shí),就把編輯器的位置平移同樣的距離:





平移編輯器之后,要把編輯器內(nèi)的子元素同時(shí)平移:





移動控制點(diǎn):





重新計(jì)算光標(biāo)的位置:





2.28.3 效果







2.28.4 新的問題:拖動事件的z-index

Bug表現(xiàn):如下圖,我加了一些輔助線。當(dāng)我的鼠標(biāo)從兩個(gè)邊框重疊處開始拖動,且我拖動了一定距離(記為n),但是編輯器卻移動了2n的距離。

原因分析:這是因?yàn)橐淮瓮蟿釉趦蓚€(gè)邊框內(nèi)的DragZone內(nèi)都觸發(fā)了,所以編輯器移動的距離就疊加了。







解決辦法:給拖動事件添加z-index,確保一次只會觸發(fā)一個(gè)拖動事件。解決之后,方便我們之后實(shí)現(xiàn)拖動控制點(diǎn)調(diào)整編輯器大小的邏輯。

2.28.5 實(shí)現(xiàn):拖動事件的z-index

實(shí)現(xiàn)方式類似之前實(shí)現(xiàn)過的:click事件的z-index。兩者的區(qū)別是:







2.28.6 最終效果







(未完待續(xù))

關(guān)鍵詞:邊框,編輯

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉