AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

圖形編輯器開發(fā):屬性顯示與格式轉(zhuǎn)換

來源: 責(zé)編: 時(shí)間:2023-10-10 18:30:15 250觀看
導(dǎo)讀大家好,我是前端西瓜哥。今天簡(jiǎn)單講講圖形編輯器的顯示屬性值時(shí),會(huì)遇到的格式轉(zhuǎn)換問題。編輯器 github 地址:https://github.com/F-star/suika線上體驗(yàn):https://blog.fstars.wang/app/suika/單位轉(zhuǎn)換圖形編輯器中的數(shù)據(jù),通

0H028資訊網(wǎng)——每日最新資訊28at.com

大家好,我是前端西瓜哥。0H028資訊網(wǎng)——每日最新資訊28at.com

今天簡(jiǎn)單講講圖形編輯器的顯示屬性值時(shí),會(huì)遇到的格式轉(zhuǎn)換問題。0H028資訊網(wǎng)——每日最新資訊28at.com

編輯器 github 地址:0H028資訊網(wǎng)——每日最新資訊28at.com

https://github.com/F-star/suika0H028資訊網(wǎng)——每日最新資訊28at.com

線上體驗(yàn):0H028資訊網(wǎng)——每日最新資訊28at.com

https://blog.fstars.wang/app/suika/0H028資訊網(wǎng)——每日最新資訊28at.com

單位轉(zhuǎn)換

圖形編輯器中的數(shù)據(jù),通過 UI 層進(jìn)行展示時(shí),可能不會(huì)直接將數(shù)據(jù)源的原始值展示出來,而是會(huì)額外進(jìn)行單位的轉(zhuǎn)換,變成另一種格式。0H028資訊網(wǎng)——每日最新資訊28at.com

這里以簡(jiǎn)單而常見的弧度為例。0H028資訊網(wǎng)——每日最新資訊28at.com

圖形的旋轉(zhuǎn)在數(shù)據(jù)源中,會(huì)用弧度(radian)表示。因?yàn)榛《雀m合進(jìn)行數(shù)學(xué)計(jì)算,且很多 API 比如 Math.sin(x) 都需要你提供弧度。0H028資訊網(wǎng)——每日最新資訊28at.com

但在面向用戶的 UI 層,我們通常會(huì)提供角度(degree),因?yàn)槿粘I钪腥藗兏J褂茫庇^。0H028資訊網(wǎng)——每日最新資訊28at.com

0H028資訊網(wǎng)——每日最新資訊28at.com

但數(shù)據(jù)中我們還是要保存弧度的。0H028資訊網(wǎng)——每日最新資訊28at.com

轉(zhuǎn)換算法

我們需要明確的點(diǎn)是:0H028資訊網(wǎng)——每日最新資訊28at.com

  • 數(shù)據(jù)源要用唯一格式,這樣可以確保運(yùn)算邏輯的一致性。比如旋轉(zhuǎn)不建議即可以保存弧度,也可以保存角度。另外,盡量選擇精度高的。
  • 如果有顯示另一種格式的需求,你需要實(shí)現(xiàn)源格式轉(zhuǎn)其他格式算法。比如弧度轉(zhuǎn)角度顯示到用戶界面上;
  • 如果有修改其他格式然后修改源數(shù)據(jù)的需求,你需要實(shí)現(xiàn)其他格式轉(zhuǎn)源數(shù)據(jù)的算法。
/** * 弧度轉(zhuǎn)角度 */export function radian2Degree(radian: number) {  return (radian * 180) / Math.PI;}/** * 角度轉(zhuǎn)弧度 */export function degree2Radian(degree: number) {  return (degree * Math.PI) / 180;}

需要注意,格式的轉(zhuǎn)換通常會(huì)丟失一些精度的。0H028資訊網(wǎng)——每日最新資訊28at.com

這里弧度和角度的轉(zhuǎn)換就是一個(gè)例子。0H028資訊網(wǎng)——每日最新資訊28at.com

圓周率是一個(gè)無限不循環(huán)小數(shù),計(jì)算的時(shí)候,會(huì)對(duì)其丟掉一些精度再參與計(jì)算,最后的結(jié)果自然也丟失了精度。0H028資訊網(wǎng)——每日最新資訊28at.com

這里給一下 UI 層實(shí)現(xiàn)思路,以 React 組件為例,核心實(shí)現(xiàn)大致如下:0H028資訊網(wǎng)——每日最新資訊28at.com

const [radian, setRadian] = useState(0);useEffect(() => {  rect.onRotationChange((val) => {    // 從編輯器內(nèi)核同步過來的狀態(tài)    setRadian(val);  })});<NumberInput  label="旋轉(zhuǎn)"  value={remainDecimal(radian2Degree(radian))}  onBlur={(e) => {    const degree =  e.target.value;    const radian = normalizeRadian(degree2Radian(degree));    rect.setRotation(radian);  }}/>

題外話,UI 層會(huì)直接更新編輯器中的狀態(tài),成功更新后通過事件訂閱通知回 UI 層,同步狀態(tài)。0H028資訊網(wǎng)——每日最新資訊28at.com

弧度還是比較簡(jiǎn)單的場(chǎng)景。0H028資訊網(wǎng)——每日最新資訊28at.com

像是復(fù)雜一點(diǎn)的屬性,比如顏色值,通常要實(shí)現(xiàn)一個(gè)比較完善的拾色器,要支持多種格式,如RGBA、HSL、CMYK 等等,要實(shí)現(xiàn)的方法就更復(fù)雜也更多。0H028資訊網(wǎng)——每日最新資訊28at.com

降低顯示精度

UI 層不會(huì)顯示全精度,意義不大。0H028資訊網(wǎng)——每日最新資訊28at.com

比如 x 坐標(biāo)的真實(shí)值是 52.24621202458749,但用戶是不希望看到這么長(zhǎng)的值的,他只是想知道這個(gè)點(diǎn)大概在什么位置。0H028資訊網(wǎng)——每日最新資訊28at.com

所以我們最好做一個(gè)四舍五入,比如保留有限的有效位顯示為 52.25。0H028資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,修改屬性值時(shí)不用做降低精度再轉(zhuǎn)為源格式,我們的數(shù)據(jù)源精度越高越好。0H028資訊網(wǎng)——每日最新資訊28at.com

只在顯示時(shí)做降低精度。0H028資訊網(wǎng)——每日最新資訊28at.com

檢驗(yàn)和補(bǔ)正

因?yàn)樯婕暗接脩粜薷膶傩灾担晕覀冃枰獙?duì)用戶的輸入值進(jìn)行處理,嘗試得到一個(gè)合法值去修改屬性。0H028資訊網(wǎng)——每日最新資訊28at.com

簡(jiǎn)單的做法是 嚴(yán)格校驗(yàn),比如對(duì)于數(shù)字類型,出現(xiàn)非數(shù)字字符,就直接認(rèn)為非法值。0H028資訊網(wǎng)——每日最新資訊28at.com

稍微好一點(diǎn)的是從字符串中提取符合格式的部分。0H028資訊網(wǎng)——每日最新資訊28at.com

更人性化的是猜測(cè)用戶想干嘛,做補(bǔ)全。比如對(duì)于 hex 格式的顏色值,用戶只輸入一個(gè) 3,我們給他補(bǔ)全為 33333。0H028資訊網(wǎng)——每日最新資訊28at.com

0H028資訊網(wǎng)——每日最新資訊28at.com

最后

畫一張圖總結(jié)一下。0H028資訊網(wǎng)——每日最新資訊28at.com

0H028資訊網(wǎng)——每日最新資訊28at.com

展示層可能和數(shù)據(jù)源的格式不同,顯示時(shí)要做格式轉(zhuǎn)換,然后降低精度,比如對(duì)于數(shù)字通常保留 1 到 5 個(gè)小數(shù)位就夠了。0H028資訊網(wǎng)——每日最新資訊28at.com

修改非源格式要做校驗(yàn)和補(bǔ)正,然后轉(zhuǎn)回?cái)?shù)據(jù)源格式保存起來。保存成功后再把新值傳遞到 UI 層。0H028資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-12675-0.html圖形編輯器開發(fā):屬性顯示與格式轉(zhuǎn)換

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 30 個(gè)有用的 JavaScript 代碼片段(下)

下一篇: veImageX 演進(jìn)之路:Web 圖片加載提速50%

標(biāo)簽:
  • 熱門焦點(diǎn)
Top