最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用JavaScript實現(xiàn)計算顏色的相對亮度并確定相應的文本顏色

 更新時間:2024年04月24日 10:31:42   作者:日升  
這篇文章主要為大家詳細介紹了如何使用JavaScript實現(xiàn)計算顏色的相對亮度并確定相應的文本顏色,感興趣的小伙伴可以跟隨小編一起學習一下

一、需求內容

需求點:給出一組顏色列表,渲染對應的顏色以及顏色值,但是要保證文本顏色和背景色不沖突,文本顏色保持 blackwhite 兩種即可

示例如下:每個模塊背景色為當前顏色,文案內容為當前顏色值,文案顏色為當前顏色通過計算后的 'black' 或 'white'

二、實現(xiàn)方案

思路

背景顏色與文本顏色不能沖突,亮的背景色展示黑色文案,深的背景色展示白色文案

使用 YUV 與 RGB 顏色轉化公式

判斷 a 的值,也就是透明度,透明度越小顏色越淺

實現(xiàn)流程

先把顏色轉化成 rgba

根據(jù)計算公式 (r * 299 + g * 587 + b * 114) / 1000 將RGB顏色轉換為YUV顏色

判斷計算出來的值在判斷 a 的值來確定文本顏色的值

三、代碼實現(xiàn)

/**
 * 把十六進制顏色值轉成 rgba 顏色值
 * @param {string} hex 
 * @returns {string} rgba 顏色值
 */
const hexToRgba = (hex: string): string => {
  const rgba = []
  hex = hex.replace('#', '').padEnd(8, 'F')
  for (let i = 0; i < hex.length; i+=2) {
    rgba.push(parseInt(hex.slice(i, i+2), 16))
  }
  return rgba.reduce((prev, item, index) => {
    return prev += index >= rgba.length - 1 ? Number((item / 255).toFixed(2)) : `${item}, `
  }, 'rgba(') + ')'
}
/**
 * 計算文本顏色值
 * @param {string} hexColor 
 * @returns {'black' | 'white'} 文本顏色值
 */
const determineTextColor = (hexColor: string): 'black' | 'white' => {
  // 將十六進制顏色值轉換為 RGB 格式
  const rgbColor = hexToRgba(hexColor);
  // 獲取顏色的 RGB 分量
  const [r, g, b, a] = (rgbColor.match(/\d+(\.\d+)?/g) || []).map(Number);
  // 計算顏色的相對亮度
  const brightness = (r * 299 + g * 587 + b * 114) / 1000;
  // 根據(jù)相對亮度確定文本顏色
  return brightness > 125 ? 'black' : (a < 0.4 ? 'black' : 'white') 
}

四、案例效果展示

案例

const colorList = [
  "#FAFAFAA6",
  "#000000FF",
  "#000000EE",
  "#000000AA",
  "#00000088",
  "#00000066",
  "#00000033",
  "#00000022",
  "#00000011",
  "#00000000",
  "#333333FF",
  "#FFFFFFFF",
  "#FFFFFFEE",
  "#FFFFFFBB",
  "#FFFFFFAA",
  "#FFFFFF99",
  "#FFFFFF88",
  "#FFFFFF66",
  "#FFFFFF33",
  "#FFFFFF22",
  "#FFFFFF11",
  "#344258FF",
  "#4CAF50DE",
  "#364FBBFF",
  "#00000040",
  "#FF4D4FFF",
  "#233494FF",
  "#0505050F",
  "#00000005",
  "#E7E8EAFF",
  "#F5F7FAFF",
  "#7A7A7AFF",
  "#1677FFFF",
  "#69B1FFFF",
  "#0958D9FF",
  "#00000014",
  "#0000001E",
  "#0000000C",
  "#52C41AFF",
  "#FAAD14FF",
  "#00000073",
  "#0000000F",
  "#001529FF",
  "#002140FF",
  "#FFFFFF33",
  "#722ED1FF",
  "#13C2C2FF",
  "#EB2F96FF",
  "#F5222DFF",
  "#FA8C16FF",
  "#FADB14FF",
  "#FA541CFF",
  "#2F54EBFF",
  "#A0D911FF",
  "#000000D9",
  "#ADBBE0FF",
  "#5A71C7FF",
  "#FFF2F0FF",
  "#FFFFFFA6",
  "#FFFFFF00",
  "#FFFFFF40",
  "#FF7875FF",
  "#000C17FF",
  "#0543C014",
  "#0000000A",
  "#FFA39EFF",
  "#FF26050F",
  "#FFD666FF",
  "#FFD70519",
  "#D9363EFF",
  "#00000026",
  "#DDE2EDFF",
  "#F5F5F5FF",
  "#F0F0F0FF",
  "#D9D9D9FF",
  "#000FFFFF",
  "#000000A6",
  "#EBF0FAFF",
  "#8196D4FF",
  "#F6FFEDFF",
  "#D9F7BEFF",
  "#B7EB8FFF",
  "#95DE64FF",
  "#389E0DFF",
  "#73D13DFF",
  "#FFF1F0FF",
  "#FFCCC7FF",
  "#FFFBE6FF",
  "#FFF1B8FF",
  "#FFE58FFF",
  "#D48806FF",
  "#FFC53DFF",
  "#E6F4FFFF",
  "#BAE0FFFF",
  "#91CAFFFF",
  "#4096FFFF",
  "#FAFAFAFF",
  "#EDEDEDFF",
  "#E0E0E0FF",
  "#D4D4D4FF",
  "#C7C7C7FF",
  "#A1A1A1FF",
  "#545454FF",
  "#2E2E2EFF"
]
let html = '<ul>'
colorList.forEach((item) => {
  const data = determineTextColor(item)
  html += `<li style="background: ${item}; color: ${data}; border: 1px solid ${data};">${item}</li>`
})
html += '</ul>'
document.body.innerHTML = html

圖片展示

到此這篇關于使用JavaScript實現(xiàn)計算顏色的相對亮度并確定相應的文本顏色的文章就介紹到這了,更多相關JavaScript計算顏色相對亮度內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 用javascript實現(xiàn)點擊鏈接彈出"圖片另存為"而不是直接打開

    用javascript實現(xiàn)點擊鏈接彈出"圖片另存為"而不是直接打開

    用javascript實現(xiàn)點擊鏈接彈出"圖片另存為"而不是直接打開...
    2007-08-08
  • 一個封裝js代碼-----展開收起效果示例

    一個封裝js代碼-----展開收起效果示例

    本文為大家介紹下一個封裝展開收起效果js代碼;引用jQuery的框架,兼容ie6以上,火狐,谷歌,ie6沒有測試大家可以自己測試
    2013-07-07
  • JS+CSS實現(xiàn)美化的下拉列表框效果

    JS+CSS實現(xiàn)美化的下拉列表框效果

    這篇文章主要介紹了JS+CSS實現(xiàn)美化的下拉列表框效果,涉及javascript針對下拉列表框樣式的相關操作技巧,非常美觀大方,需要的朋友可以參考下
    2015-08-08
  • 普通web整合quartz跑定時任務的示例

    普通web整合quartz跑定時任務的示例

    這篇文章主要介紹了普通web整合quartz跑定時任務,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • JavaScript 10件讓人費解的事情

    JavaScript 10件讓人費解的事情

    JavaScript 可算是世界上最流行的編程語言,它曾被 Web 開發(fā)設計師貼上噩夢的標簽,雖然真正的噩夢其實是 DOM API,這個被大量的開發(fā)與設計師隨手拈來增強他們的 Web 前端的腳本語言,如今越來越被重視,雖則如此,JavaScript 仍然擁有很多讓人費解的東西。
    2010-02-02
  • CommonJS與ES6?Module的使用區(qū)別分析

    CommonJS與ES6?Module的使用區(qū)別分析

    這篇文章主要為大家介紹了CommonJS與ES6?Module的使用區(qū)別分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • javascript操作數(shù)組詳解

    javascript操作數(shù)組詳解

    這篇文章主要詳細介紹了javascript操作數(shù)組的方法以及示例,需要的朋友可以參考下
    2014-12-12
  • js實現(xiàn)自定義右鍵菜單

    js實現(xiàn)自定義右鍵菜單

    這篇文章主要為大家詳細介紹了js實現(xiàn)自定義右鍵菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • js實現(xiàn)正則匹配中文標點符號的方法

    js實現(xiàn)正則匹配中文標點符號的方法

    這篇文章主要介紹了js實現(xiàn)正則匹配中文標點符號的方法,涉及JavaScript正則匹配與判定的簡單使用技巧,需要的朋友可以參考下
    2015-12-12
  • JavaScript阻止事件冒泡的幾種方法小結

    JavaScript阻止事件冒泡的幾種方法小結

    在?JavaScript?中,事件冒泡是指事件從觸發(fā)元素向上傳播到其祖先元素的過程,阻止事件冒泡可以防止事件傳播到父元素或其他祖先元素,本文給大家介紹了JavaScript阻止事件冒泡的幾種方法,需要的朋友可以參考下
    2025-03-03

最新評論

三河市| 弥渡县| 景洪市| 轮台县| 长垣县| 明光市| 彰化县| 五台县| 新密市| 裕民县| 临高县| 西峡县| 五莲县| 尉犁县| 会东县| 南丹县| 壶关县| 阿瓦提县| 弥渡县| 永善县| 华亭县| 民丰县| 郴州市| 凌源市| 铜鼓县| 永登县| 乌鲁木齐市| 东兰县| 资溪县| 浑源县| 贺州市| 五家渠市| 钟祥市| 招远市| 同德县| 乌拉特中旗| 颍上县| 嘉禾县| 黄平县| 明光市| 乐至县|