hex 添加透明度和rgba互轉(zhuǎn)

hex中#后八個字符 前6個 每兩個 代表0-255的十六進制數(shù)值婉称,最后兩位才是透明度(我看好多文章說是前兩位 親測是后兩位)B倭恪!妆丘!
alphaHexMap是透明度 對應(yīng)的表
getHexWithAlpha方法 就是轉(zhuǎn)換方法 參數(shù)color是不帶透明度的 hex棚辽,a是透明度小數(shù)
其他方法為轉(zhuǎn)換的方法

/* eslint-disable */
/**
* @description: 設(shè)置style-config
* @param {obj} :notNeed ['title','content','border','margin','padding'] 不需要屬性去除
* @return {obj} style對象
*/
const alphaHexMap = {
   '1.00':'FF',
   '0.99':'FC',
   '0.98':'FA',
   '0.97':'F7',
   '0.96':'F5',
   '0.95':'F2',
   '0.94':'F0',
   '0.93':'ED',
   '0.92':'EB',
   '0.91':'E8',
   '0.90':'E6',
   '0.89':'E3',
   '0.88':'E0',
   '0.87':'DE',
   '0.86':'DB',
   '0.85':'D9',
   '0.84':'D6',
   '0.83':'D4',
   '0.82':'D1',
   '0.81':'CF',
   '0.80':'CC',
   '0.79':'C9',
   '0.78':'C7',
   '0.77':'C4',
   '0.76':'C2',
   '0.75':'BF',
   '0.74':'BD',
   '0.73':'BA',
   '0.72':'B8',
   '0.71':'B5',
   '0.70':'B3',
   '0.69':'B0',
   '0.68':'AD',
   '0.67':'AB',
   '0.66':'A8',
   '0.65':'A6',
   '0.64':'A3',
   '0.63':'A1',
   '0.62':'9E',
   '0.61':'9C',
   '0.60':'99',
   '0.59':'96',
   '0.58':'94',
   '0.57':'91',
   '0.56':'8F',
   '0.55':'8C',
   '0.54':'8A',
   '0.53':'87',
   '0.52':'85',
   '0.51':'82',
   '0.50':'80',
   '0.49':'7D',
   '0.48':'7A',
   '0.47':'78',
   '0.46':'75',
   '0.45':'73',
   '0.44':'70',
   '0.43':'6E',
   '0.42':'6B',
   '0.41':'69',
   '0.40':'66',
   '0.39':'63',
   '0.38':'61',
   '0.37':'5E',
   '0.36':'5C',
   '0.35':'59',
   '0.34':'57',
   '0.33':'54',
   '0.32':'52',
   '0.31':'4F',
   '0.30':'4D',
   '0.29':'4A',
   '0.28':'47',
   '0.27':'45',
   '0.26':'42',
   '0.25':'40',
   '0.24':'3D',
   '0.23':'3B',
   '0.22':'38',
   '0.21':'36',
   '0.20':'33',
   '0.19':'30',
   '0.18':'2E',
   '0.17':'2B',
   '0.16':'29',
   '0.15':'26',
   '0.14':'24',
   '0.13':'21',
   '0.12':'1F',
   '0.11':'1C',
   '0.10':'1A',
   '0.09':'17',
   '0.08':'14',
   '0.07':'12',
   '0.06':'0F',
   '0.05':'0D',
   '0.04':'0A',
   '0.03':'08',
   '0.02':'05',
   '0.01':'03',
   '0.00':'00',
}
export const getHexWithAlpha = ({ hex, rgb =  {a: 1} }) => {
   return (hex.indexOf('#') !== -1 ? hex.substr(1, hex.length -1) : hex)?.toUpperCase() + alphaHexMap[rgb?.a?.toFixed(2)]
}
export const setStyleConfig = (notNeed) => {
   const style = {
       '--title-textColor': 'rgba(17, 17, 17, 1)',
       '--title-bgColor': 'rgba(255, 255, 255, 1)',
       '--title-bgImg': '',
       '--title-bgSize': 'cover',
       '--title-bgRepeat': 'no-repeat',
       '--content-textColor': 'rgba(17, 17, 17, 1)',
       '--content-bgColor': 'rgba(255, 255, 255, 1)',
       '--content-bgImg': '',
       '--content-bgSize': 'cover',
       '--content-bgRepeat': 'no-repeat',
       '--borderBottomRightRadius': 12,
       '--borderTopRightRadius': 12,
       '--borderBottomLeftRadius': 12,
       '--borderTopLeftRadius': 12,
       '--marginTop': 18,
       '--marginBottom': 18,
       '--marginLeft': 18,
       '--marginRight': 18,
   }
   notNeed && notNeed.forEach(item => {
       Object.keys(style).forEach((key) => {
           if (key.slice(2).split('-')[0] === item) {
               delete style[key]
           }
       })
   })
   return style
}
/**
* @description: 處理rgba
* @param {obj,string} :rgba||color參數(shù),color轉(zhuǎn)rgba對象  rgba對象時轉(zhuǎn)color色值
* @return {obj} 返回一個{r,g,b,a} 對象 || rgba()顏色
*/
export const transRgba = (data) => {
   let obj = null
   if ((typeof (data) === 'string') && (data.indexOf('rgba') === -1)) {
       return data;
   } else if (Object.prototype.toString.call(data) === '[object String]') {
       let arr = data.match(/\(([^)]*)\)/)[1].split(',')
       obj = {
           r: Number(arr[0]),
           g: Number(arr[1]),
           b: Number(arr[2]),
           a: Number(arr[3])
       }
   } else {
       let { r, g, b, a } = data
       obj = `rgba(${r},${g},$技竟,${a})`
   }
   return obj
}
/**
* @description: rgba轉(zhuǎn)hex
* @param {type}
* @return {type}
*/
export const getHexColor = (color) => {
   var values = color
       .replace(/rgba?\(/, '')
       .replace(/\)/, '')
       .replace(/[\s+]/g, '')
       .split(',')
   var a = parseFloat(values[3] || 1),
       r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255),
       g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255),
       b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255)
   return '#' +
       ('0' + r.toString(16)).slice(-2) +
       ('0' + g.toString(16)).slice(-2) +
       ('0' + b.toString(16)).slice(-2)
}
/**
* @description: hex轉(zhuǎn)rgba
* @param {type} 
* @return {type} 
*/
export const getRgba = (sHex) => {
   // 十六進制顏色值的正則表達式
   var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/
   /* 16進制顏色轉(zhuǎn)為RGB格式 */
   var sColor = sHex.toLowerCase()
   var alpha = 1
   if (sColor && reg.test(sColor)) {
       if (sColor.length === 4 || sColor.length === 5) {
           var sColorNew = '#'
           for (var i = 1; i < sColor.length; i += 1) {
               sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1))
           }
           sColor = sColorNew
       }
       // 如果有透明度再執(zhí)行
       if (sColor.length === 9) {
           alpha = (parseInt('0x' + sColor.slice(7, 9)) / 255).toFixed(2)
       }
       //  處理六位的顏色值
       var sColorChange = []
       for (var i = 1; i < 7; i += 2) {
           sColorChange.push(parseInt('0x' + sColor.slice(i, i + 2)))
       }
       return 'rgba(' + sColorChange.join(',') + ',' + alpha + ')'
   } else {
       return sColor
   }
}
/**
* @description: 刪除||添加 前綴
* @param {type} 
* @return {type} 
*/
export const addReduceSymbol = (obj, symbol) => {
   var newObj
   if (Object.prototype.toString.call(obj) === "[object Object]") {
       newObj = {}
       Object.keys(obj).forEach((key) => {
           if (key.indexOf(symbol) === 0) {
               newObj[key.slice(symbol.length)] = obj[key]
           } else {
               newObj[symbol + key] = obj[key]
           }
       })
   }
   return newObj
}
/**
* @description: 重置樣式單位 追加px 等 自己擴展
* @param {obj} 
* @return {obj} 
*/
export const resetStyle = (obj) => {
   let newObj = obj || {}
   Object.keys(obj).forEach((key) => {
       if (typeof (obj[key]) === 'number') {
           newObj[key] = newObj[key] + 'px'
       }
   })
   return newObj
}

export const getQuery = (url, name) => {
   var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
   var r = url.substr(url.indexOf("\?") + 1).match(reg);
   if (r !== null) return unescape(r[2]);
   return null;
}
export default {
   transRgba,
   setStyleConfig,
   getQuery,
   resetStyle
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屈藐,隨后出現(xiàn)的幾起案子榔组,更是在濱河造成了極大的恐慌,老刑警劉巖联逻,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搓扯,死亡現(xiàn)場離奇詭異,居然都是意外死亡遣妥,警方通過查閱死者的電腦和手機擅编,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箫踩,“玉大人,你說我怎么就攤上這事谭贪【持樱” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵俭识,是天一觀的道長慨削。 經(jīng)常有香客問我,道長套媚,這世上最難降的妖魔是什么缚态? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮堤瘤,結(jié)果婚禮上玫芦,老公的妹妹穿的比我還像新娘。我一直安慰自己本辐,他們只是感情好桥帆,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布医增。 她就那樣靜靜地躺著,像睡著了一般老虫。 火紅的嫁衣襯著肌膚如雪叶骨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天祈匙,我揣著相機與錄音忽刽,去河邊找鬼。 笑死夺欲,一個胖子當(dāng)著我的面吹牛缔恳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洁闰,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼歉甚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扑眉?” 一聲冷哼從身側(cè)響起纸泄,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腰素,沒想到半個月后聘裁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡弓千,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年衡便,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洋访。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡镣陕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姻政,到底是詐尸還是另有隱情呆抑,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布汁展,位于F島的核電站鹊碍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏食绿。R本人自食惡果不足惜侈咕,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望器紧。 院中可真熱鬧耀销,春花似錦、人聲如沸品洛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帽揪,卻和暖如春硝清,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背转晰。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工芦拿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人查邢。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓蔗崎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扰藕。 傳聞我的和親對象是個殘疾皇子缓苛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355