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

JS實現(xiàn)隨機顏色的3種方法與顏色格式的轉(zhuǎn)化

 更新時間:2017年01月05日 10:54:05   作者:Mervyn Zhang  
隨機顏色和顏色格式是我們在開發(fā)中經(jīng)常要用到的一個小功能,網(wǎng)上相關(guān)的資料也很多,想著有必要總結(jié)一下自己的經(jīng)驗。所以這篇文章主要介紹了JS實現(xiàn)隨機顏色的3種方法與顏色格式的轉(zhuǎn)化,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

相信大家都知道在前端的顏色表示方式有多種,一種是以3個或6個十六進制的數(shù)子表示,一種是RGB的數(shù)字形式,還有一種是直接以顏色的英文來表示。這三種都是不支持透明色的。所以還有RGBA的表式方式,在RGB的的基礎(chǔ)上加入了Alpha透明,使網(wǎng)頁可以展現(xiàn)更加復(fù)雜絢麗的效果。

隨機顏色

在平時的碼農(nóng)日常中,經(jīng)常會用到求隨機顏色的地方,下面是我總結(jié)的幾種簡單的實現(xiàn)隨機顏色的方式:

十六進制格式(#000000-#FFFFFF)

第一種是比較簡單的方法,這種方法是先隨機生成ffffff以內(nèi)16進制數(shù),然后判斷位數(shù),少于6位的用while循環(huán)在前面加0,湊夠6位。

function randomHexColor() { //隨機生成十六進制顏色
 var hex = Math.floor(Math.random() * 16777216).toString(16); //生成ffffff以內(nèi)16進制數(shù)
 while (hex.length < 6) { //while循環(huán)判斷hex位數(shù),少于6位前面加0湊夠6位
  hex = '0' + hex;
 }
 return '#' + hex; //返回‘#'開頭16進制顏色
}

還有一種比較方便但是比較難懂的方法,需要用到位運算。

function randomHexColor() { //隨機生成十六進制顏色
 return '#' + ('00000' + (Math.random() * 0x1000000 << 0).toString(16)).substr(-6);
}

按執(zhí)行順序可以分為以下六步:

  1. 先執(zhí)行Math.random() * 0x1000000,其中0x1000000=0xffffff+1,因為Math.random()取不到1,所以+1,這樣就會生成一個1-16777216(不包含)以內(nèi)的浮點數(shù)。
  2. 然后執(zhí)行<<0,這是取整運算,去掉后面的小數(shù)點。這時為一個16777216(不包含)以內(nèi)的十進制數(shù)。
  3. 之后執(zhí)行.toString(16) ,把十進制數(shù)轉(zhuǎn)化為六位以下16進制數(shù)。
  4. 再后執(zhí)行'00000'+,這時因為之前生成的16進制數(shù)最少可能僅一位,在前面加上5個0。
  5. 最后執(zhí)行.substr(-6) ,是去從-6開始的后面所有字符串,也就是最后6位數(shù)。
  6. 前面加上#并retuen。

RGB格式

function randomRgbColor() { //隨機生成RGB顏色
 var r = Math.floor(Math.random() * 256); //隨機生成256以內(nèi)r值
 var g = Math.floor(Math.random() * 256); //隨機生成256以內(nèi)g值
 var b = Math.floor(Math.random() * 256); //隨機生成256以內(nèi)b值
 return `rgb(${r},${g},$)`; //返回rgb(r,g,b)格式顏色
}

RGBA格式

function randomRgbaColor() { //隨機生成RGBA顏色
 var r = Math.floor(Math.random() * 256); //隨機生成256以內(nèi)r值
 var g = Math.floor(Math.random() * 256); //隨機生成256以內(nèi)g值
 var b = Math.floor(Math.random() * 256); //隨機生成256以內(nèi)b值
 var alpha = Math.random(); //隨機生成1以內(nèi)a值
 return `rgb(${r},${g},$,${alpha})`; //返回rgba(r,g,b,a)格式顏色
}

顏色格式轉(zhuǎn)化

在編碼過程中,經(jīng)常會遇到要將顏色格式相互轉(zhuǎn)化的問題,其中十六進制格式和RGB格式是可以相互轉(zhuǎn)化的,但是RGBA格式由于多了前兩者沒有的Alpha透明屬性,所以和前兩者轉(zhuǎn)化會丟失Alpha值,不建議進行轉(zhuǎn)化,下面是我的顏色轉(zhuǎn)化的方法:

十六進制轉(zhuǎn)為RGB

function hex2Rgb(hex) { //十六進制轉(zhuǎn)為RGB
 var rgb = []; // 定義rgb數(shù)組
 if (/^\#[0-9A-F]{3}$/i.test(hex)) { //判斷傳入是否為#三位十六進制數(shù)
  let sixHex = '#';
  hex.replace(/[0-9A-F]/ig, function(kw) {
   sixHex += kw + kw; //把三位16進制數(shù)轉(zhuǎn)化為六位
  });
  hex = sixHex; //保存回hex
 }
 if (/^#[0-9A-F]{6}$/i.test(hex)) { //判斷傳入是否為#六位十六進制數(shù)
  hex.replace(/[0-9A-F]{2}/ig, function(kw) {
   rgb.push(eval('0x' + kw)); //十六進制轉(zhuǎn)化為十進制并存如數(shù)組
  });
  return `rgb(${rgb.join(',')})`; //輸出RGB格式顏色
 } else {
  console.log(`Input ${hex} is wrong!`);
  return 'rgb(0,0,0)';
 }
}

RGB轉(zhuǎn)為十六進制

function rgb2Hex(rgb) {
 if (/^rgb\((\d{1,3}\,){2}\d{1,3}\)$/i.test(rgb)) { //test RGB
  var hex = '#'; //定義十六進制顏色變量
  rgb.replace(/\d{1,3}/g, function(kw) { //提取rgb數(shù)字
   kw = parseInt(kw).toString(16); //轉(zhuǎn)為十六進制
   kw = kw.length < 2 ? 0 + kw : kw; //判斷位數(shù),保證兩位
   hex += kw; //拼接
  });
  return hex; //返回十六進制
 } else {
  console.log(`Input ${rgb} is wrong!`);
  return '#000'; //輸入格式錯誤,返回#000
 }
}

總結(jié)

以上就是這篇文文章的全部內(nèi)容了,也是我在平時遇到的關(guān)于顏色處理方面的問題,大家有遇到什么奇怪的問題和更好的解決方法可以交流溝通一下。希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助。

相關(guān)文章

  • javascript ES6 Template String模板字符串使用方法

    javascript ES6 Template String模板字符串使用方法

    這篇文章主要介紹了javascript ES6 模板字符串(Template String)是增強版的字符串,用反引號(`)標識,它可以當作普通字符串使用,也可以用來定義多行字符串,或者在字符串中嵌入變量,需要的朋友可以參考下
    2023-06-06
  • 通過Jscript中@cc_on 語句識別IE瀏覽器及版本的代碼

    通過Jscript中@cc_on 語句識別IE瀏覽器及版本的代碼

    通過Jscript中@cc_on 語句識別IE瀏覽器及版本的代碼,需要的朋友可以參考下。
    2011-05-05
  • openlayers實現(xiàn)地圖彈窗

    openlayers實現(xiàn)地圖彈窗

    這篇文章主要為大家詳細介紹了openlayers實現(xiàn)地圖彈窗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Javascript前端下載后臺傳來的文件流代碼實例

    Javascript前端下載后臺傳來的文件流代碼實例

    這篇文章主要介紹了Javascript前端下載后臺傳來的文件流代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • js控制文本框只能輸入中文、英文、數(shù)字與指定特殊符號的實現(xiàn)代碼

    js控制文本框只能輸入中文、英文、數(shù)字與指定特殊符號的實現(xiàn)代碼

    下面小編就為大家?guī)硪黄猨s控制文本框只能輸入中文、英文、數(shù)字與指定特殊符號的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • js驗證身份證號有效性并提示對應(yīng)信息

    js驗證身份證號有效性并提示對應(yīng)信息

    這篇文章主要介紹了一段超級全面的二代身份證號碼驗證程序,
    2015-10-10
  • Webpack中無法解析別名路徑的原因及解決方案

    Webpack中無法解析別名路徑的原因及解決方案

    在現(xiàn)代前端開發(fā)中,Webpack 是一個強大的模塊打包工具,廣泛應(yīng)用于各種項目中,為了簡化模塊導(dǎo)入路徑,開發(fā)者常常會在Webpack中配置別名路徑(alias),然而,在實際使用過程中,配置別名路徑可能會遇到“無法解析別名路徑”的問題,所以本文給大家介紹了詳細的解決方案
    2025-02-02
  • 小程序?qū)崿F(xiàn)懸浮搜索框

    小程序?qū)崿F(xiàn)懸浮搜索框

    這篇文章主要為大家詳細介紹了小程序?qū)崿F(xiàn)懸浮搜索框,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 基于JavaScript短信驗證碼如何實現(xiàn)

    基于JavaScript短信驗證碼如何實現(xiàn)

    我們在使用移動、電信等運營商網(wǎng)上營業(yè)廳的時候,為確保業(yè)務(wù)的完整和正確性,經(jīng)常會需要用到短信的驗證碼。最近因為某省業(yè)務(wù)需要,也做了個類似的功能
    2016-01-01
  • Django1.7+JQuery+Ajax驗證用戶注冊集成小例子

    Django1.7+JQuery+Ajax驗證用戶注冊集成小例子

    下面是散仙使用Django+Jquery+Ajax的方式來模擬實現(xiàn)了一個驗證用戶注冊時,用戶名存在不存在的一個小應(yīng)用。注意,驗證存在不存在使用的是Ajax的方式,不用讓用戶點擊按鈕驗證是否存在,需要的朋友可以參考下
    2017-04-04

最新評論

长宁县| 佛教| 承德县| 田林县| 正蓝旗| 大石桥市| 江源县| 牙克石市| 乌苏市| 青神县| 益阳市| 栖霞市| 登封市| 枣强县| 小金县| 祁阳县| 张家口市| 陈巴尔虎旗| 华亭县| 正安县| 建阳市| 高陵县| 隆安县| 河东区| 盈江县| 岑溪市| 吴堡县| 济南市| 娱乐| 罗源县| 香港| 北辰区| 进贤县| 三原县| 海城市| 吉安市| 西宁市| 沾化县| 九龙县| 墨竹工卡县| 福清市|