成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

圖形編輯器開發:顏色 Hex 標準化

開發 后端
顏色 Hex 的通用規則是:字符的范圍需要為 0~9,a~f,A~F。長度有要求,需要為 6 位字符串(ABCDEF);也可以為 3 位,比如 ABC,它等價于 6 位的 AABBCC。

大家好,我是前端西瓜哥。

最近做圖形編輯器,有這么一個需求,在輸入框輸入顏色十六進制值(hex),自動轉為對應 6 位長度的 hex。

如果值不合法,回退為上次合法輸入。

我正在開發的圖形設計工具:

https://github.com/F-star/suika

線上體驗:

https://blog.fstars.wang/app/suika/

顏色 hex 規則

顏色 hex 的通用規則是:

  • 字符的范圍需要為 0~9,a~f,A~F。
  • 長度有要求,需要為 6 位字符串(ABCDEF);也可以為 3 位,比如 ABC,它等價于 6 位的 AABBCC。

處理用戶輸入

但是用戶的輸入你是無法預測的,大概率是不符合這兩個規則。

簡單地判斷不符合規則讓用戶的輸入無效,然后回退,并不是很好的做法。

為了有更好的用戶體驗,我們要做一下優化。

當用戶輸入完內容,回車,我們對輸入字符串進行處理。

  • 首先轉換大寫,這是為了統一格式和對比,其實和優化無關。你也可以轉小寫。
  • 取出字符串中從左開始第一個匹配上面規則的子字符串,用正則表達式是最合適的,正則為:/[0-9A-F]{1,6}/,表示匹配第一個字符為 0~9 和 A~F 的長度為 1 到 6 的字符串。
  • 如果沒匹配到,返回一個空字符串表示沒找到合法值,輸入框的內容會進行回退到上一次輸入的合法值。
  • 如果匹配到,就會根據子字符串的長度執行不同的邏輯
  • 長度為 6,剛好,直接返回它。
  • 長度為 4 和 5,屬于是 “高不成低不就”,我們將其截斷為 3。(或者你可以給它末尾補 0 補滿到 6 位)
  • 長度為 3,我們應用的規則是,從 ABC 轉換為 AABBCC,因為對應經典規則,前者是后者的縮寫。
  • 長度為 2 或 1,則不斷地將自己添加到末尾,直到滿 6 位,比如:AB 會變成 AABBCC,A 會變成 AAAAAA。

這樣用戶輸入 #0,這個輸入本身不符合顏色 hex 規則,但我們理解用戶其實是想要一個純黑色。

通過上面的處理,我們會返回一個 000000,而不是簡單地認為用戶輸入不合法,將其丟掉。

代碼實現

const normalizeHex = (hex: string) => {
  // (1)轉大寫
  hex = hex.toUpperCase();
  // (2)找出其中的符合顏色 hex 規則的子字符串
  const match = hex.match(/[0-9A-F]{1,6}/);
  if (!match) {
    return '';
  }
  hex = match[0];

  if (hex.length === 6) {
    return hex;
  }
  if (hex.length === 4 || hex.length === 5) {
    hex = hex.slice(0, 3);
  }
  // ABC -> AABBCC
  if (hex.length === 3) {
    return hex
      .split('')
      .map((c) => c + c)
      .join('');
  }
  // AB -> ABABAB
  // A -> AAAAAA
  return hex.padEnd(6, hex);
};

符合經典規則(AABBCC 和 ABC)的情況:

找不到 hex 字符串的情況,會回退到上次的合法值

其他情況:

圖片

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2023-10-19 10:12:34

圖形編輯器開發縮放圖形

2023-09-07 08:24:35

圖形編輯器開發繪制圖形工具

2023-08-31 11:32:57

圖形編輯器contain

2023-09-26 07:39:21

2024-01-08 08:30:05

光標圖形編輯器開發游標

2023-09-11 09:02:31

圖形編輯器模塊間的通信

2023-10-10 16:04:30

圖形編輯器格式轉換

2023-10-08 08:11:40

圖形編輯器快捷鍵操作

2024-01-03 08:43:17

圖形編輯器旋轉控制點縮放控制點

2023-07-07 13:56:01

圖形編輯器畫布縮放

2023-07-31 08:46:07

圖形編輯器圖形自動對齊

2023-02-06 16:59:57

Canvas編輯器

2023-04-07 08:02:30

圖形編輯器對齊功能

2023-01-18 08:30:40

圖形編輯器元素

2023-02-01 09:21:59

圖形編輯器標尺

2023-06-12 08:22:56

圖形編輯器工具

2023-04-10 08:45:44

圖形編輯器排列移動功能

2023-05-09 08:15:32

圖形編輯器撤銷重做功能

2023-02-09 07:02:30

圖形編輯器修改圖形

2016-10-07 22:09:59

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久精品视频一区二区三区 | 国产精品视频一二三区 | 日韩免 | 免费一区| 久久99精品久久久久久国产越南 | 尤物在线 | 亚洲欧美一区二区三区国产精品 | 国产精品国产三级国产aⅴ中文 | 久久久久久av | 久久久www成人免费精品 | 亚洲精品大片 | 久久国产精品99久久久大便 | 国产一区二区三区视频免费观看 | 精品久久久久久 | 新超碰97 | 日韩精品一区二区三区在线播放 | 日韩免费毛片视频 | 天天看片天天干 | 成人区精品一区二区婷婷 | 国产精品视频一区二区三区四区国 | 成人国产精品久久 | 国产不卡在线观看 | 精品久久ai电影 | 久草精品视频 | 日韩成人免费视频 | 欧美性视频在线播放 | 久久精品无码一区二区三区 | 中文字幕精品一区二区三区精品 | 精品亚洲一区二区 | 国产精品毛片 | 国产视频一区二区 | 黄色网页在线 | 精产国产伦理一二三区 | 亚洲成人精品国产 | 日韩免费一区二区 | 精品视频久久久 | 夜夜操天天艹 | 久久成人免费观看 | 亚洲免费观看视频 | 亚洲精品久久久久久国产精华液 | 国产精品伦一区二区三级视频 |