前情提要
之前要做一個影片編輯器的功能更新,原始功能是點擊字型選單的選項後,更新字型。現在要懸停在上面就要把字型 preview 給使用者看
字型的變更的時候會去更新整個 編輯器 (video) 的 state。
研究階段
研究後有以下發現,我只要把原始變更字型的 function 塞到 menu item 的 mouse enter 就好,然後在 mouse enter 一開始做一個 snapshot。在 click out side 把它還原,click on item 時直接變更。
實作階段
第一個狀況
咦,等等是不是有一個 undo 跟 redo,wtf 剛剛沒考慮到。變更字型就會在 undo 跟 redo 的 stack 塞紀錄。既有的那些 function 有沒有辦法讓我在 mouse enter 時忽略 redo 跟 undo 呢?還真的有,在那邊控制一下好了。
第二個狀況
mouse enter 移動時好像有點慢,還好我知道要加 debouce 不要 apply 那麼多次 font。
爆炸
為何我 click item 變更 font 得時候 undo 不回去?幹,由於 push undo 跟 redo 的 stack 放在同一個 function。執行方式如下:
- push current state to undo
- execute state change with a callback
- push the current state to redo
um...所以我的的 step1 的 state 因為好幾個 mouse enter 最後停留在我現在要點擊的 font style 上,所以 current state 壞了。解法也很簡單,就 click item 時把 紀錄好的 snapshot 塞回到 undo 底下,apply 完再塞 current state。
但...我採用 reuse old fuction 所以很多功能必須要拆開來重寫。而我沒有時間了...當初估計三天,現在四天後果斷跟 PM 說,priority 是 low,可不可以先把其他的先做一做往後延。
結論
有時候理想的簡單解,可能會被其他功能影響。評估還是得詳細做,不然可能會出很多包