整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          WEB前端工具推薦丨分享6個熱門顏色選擇器組件

          于前端開發初學者而言,顏色選擇器可能比較陌生,甚至在實際項目中都未曾使用過。但如果開發高端一點的網站的話,通常需要自定義主題功能,可以自定義導航欄、菜單欄的文本顏色、背景色之類的,此時就用到顏色選擇器了。

          今天w3cschool編程獅為大家推薦幾個 Github 上熱門的顏色選擇器組件。

          一、Colorjoe

          colorjoe 是一個具有觸控和 AMD 支持的可擴展顏色選擇器。可以通過 CSS 定義其實際尺寸和布局。通過這種方式,該組件非常適合響應式布局。

          與那里的許多其他顏色選擇器不同,colorjoe 是真正可擴展的。它基于 CSS,不依賴于外部圖像。因此,您可以調整其大小以適應您的目的。還支持觸控和 AMD 模塊定義。

          colorjoe 受到 ColorJack 和 RightJS Colorpicker 的啟發。與那些不同的是,它實際上可以很好地擴展。從本質上講,這意味著您將能夠使用一些 CSS 定義其實際尺寸和布局。通過這種方式,小部件非常適合響應式布局。

          此外,由于它提供的簡單 API,實現缺失的功能(RGB 字段等)相對容易。

          Colorjoe

          安裝

          npm i colorjoe

          如果您更喜歡獨立的 dist,請將預打包的dist/colorjoe.js和添加css/colorjoe.css到您的頁面或從 src/使用 AMD 。

          用法

          const joe = colorjoe.rgb(element_id_or_dom_object, initial_color_value, extras);

          或者

          const joe = colorjoe.hsl(element_id_or_dom_object, initial_color_value, extras);

          二、 Colorful

          今天,每個依賴項都會拖累更多的依賴項,并且無法控制地增加項目的包大小。但是大小對于打算在瀏覽器中工作的所有內容都非常重要。React Colorful 是一個用于 React 和 Preact 應用程序的小型顏色選擇器組件,使用 hooks 和函數組件構建。它使用嚴格的 TypeScript 編寫,具有 100% 的測試覆蓋率,界面簡單易用,適用于大多數瀏覽器,支持移動設備和觸摸屏遵循 WAI-ARIA 指南以支持輔助技術的用戶,壓縮后僅 2,8 KB(比 react-color 輕小13 倍)。react-colorful 是一個簡單的顏色選擇器,適合那些關心包大小和客戶端性能的人。。

          Colorful

          安裝

          npm install react-colorful
          import { HexColorPicker } from "react-colorful";
          
          
          const YourComponent = () => {
            const [color, setColor] = useState("#aabbcc");
            return <HexColorPicker color={color} onChange={setColor} />;
          };

          支持的顏色模型

          我們為不同的顏色模型提供了 12 個額外的顏色選擇器組件,除非您的應用程序需要 HEX 字符串作為輸入/輸出格式。

          可用的選擇器

          Import

          Value example

          { HexColorPicker }

          "#ffffff"

          { RgbColorPicker }

          { r: 255, g: 255, b: 255 }

          { RgbaColorPicker }

          { r: 255, g: 255, b: 255, a: 1 }

          { RgbStringColorPicker }

          "rgb(255, 255, 255)"

          { RgbaStringColorPicker }

          "rgba(255, 255, 255, 1)"

          { HslColorPicker }

          { h: 0, s: 0, l: 100 }

          { HslaColorPicker }

          { h: 0, s: 0, l: 100, a: 1 }

          { HslStringColorPicker }

          "hsl(0, 0%, 100%)"

          { HslaStringColorPicker }

          "hsla(0, 0%, 100%, 1)"

          { HsvColorPicker }

          { h: 0, s: 0, v: 100 }

          { HsvaColorPicker }

          { h: 0, s: 0, v: 100, a: 1 }

          { HsvStringColorPicker }

          "hsv(0, 0%, 100%)"

          { HsvaStringColorPicker }

          "hsva(0, 0%, 100%, 1)"

          代碼示例

          import { RgbColorPicker } from "react-colorful";
          
          
          const YourComponent = () => {
            const [color, setColor] = useState({ r: 50, g: 100, b: 150 });
            return <RgbColorPicker color={color} onChange={setColor} />;
          };

          三、Huebee

          Huebee 是一個 JavaScript 庫,用于創建以用戶為中心的顏色選擇器。Huebee 顯示一組有限的顏色,因此用戶可以一目了然地查看所有顏色,做出明確的決定,并通過單擊選擇一種顏色。

          Huebee

          使用 npm 安裝:npm install huebee

          使用 Bower 安裝:bower install huebee --save

          在您的站點中包含 Huebee.css.js文件。

          <link rel="stylesheet" href="/path/to/huebee.css" media="screen">
          <script src="/path/to/huebee.pkgd.min.js"></script>

          Huebee 在錨元素上工作。

          <!-- use inputs so users can set colors with text -->
          <input class="color-input" value="#F80" />
          
          
          <!-- anchors can be buttons -->
          <button class="color-button">Select color</button>
          
          
          <!-- anchors can be any element -->
          <span class="current-color">Current color</span>

          四、React Color

          React Color 提供了 13 種不同的顏色選擇器,可以模擬流行網站和應用程序(如 GitHub、Photoshop、Chrome 和 Twitter)的 UI。不僅如此,還可以使用不同的組件來創建自定義顏色選擇器。

          React Color

          安裝和使用

          npm install react-color --save

          包含組件

          import React from 'react'
          import { SketchPicker } from 'react-color'
          
          
          class Component extends React.Component {
          
          
            render() {
              return <SketchPicker />
            }
          }

          可以分別導入:AlphaPicker BlockPicker ChromePicker CirclePicker CompactPicker GithubPicker HuePicker MaterialPicker PhotoshopPicker SketchPicker SliderPicker SwatchesPicker TwitterPicker

          通過ReactCSS 實現100% 內聯樣式

          五、Vue Color

          Vue Color 是一個適用于 Sketch、Photoshop、Chrome 等的 Vue (Vue2.0)顏色選擇器。

          Vue Color

          安裝

          NPM

          $ npm install vue-color

          CommonJS

          var Photoshop = require('vue-color/src/Photoshop.vue');
          
          
          new Vue({
            components: {
              'Photoshop': Photoshop
            }
          })

          ES6

          import { Photoshop } from 'vue-color'
          
          
          new Vue({
            components: {
              'photoshop-picker': Photoshop
            }
          })

          瀏覽器全局變量

          dist文件夾包含對象vue-color.jsvue-color.min.js導出的所有組件。window.VueColor這些包也可用于 NPM 包。

          <script src="path/to/vue.js"></script>
          <script src="path/to/vue-color.min.js"></script>
          <script>
            var Photoshop = VueColor.Photoshop
          </script>

          本地設置

          npm install
          npm run dev

          六、iro.js

          iro.js 是一個用于 JavaScript 的模塊化、注重設計的顏色顏色選擇器組件 - 支持多種顏色格式。所有 iro.js 都可以從單個腳本運行 - 不需要額外的 CSS、圖像或第三方庫!

          iro.js

          安裝

          使用 NPM 安裝

          npm install @jaames/iro --save

          如果您使用的是 Webpack 或 Rollup 之類的模塊打包器,請將 iro.js 導入您的項目:

          // Using ES6 module syntax
          import iro from '@jaames/iro';
          
          
          // Using CommonJS modules
          const iro = require('@jaames/iro');

          使用 jsDelivr CDN

          <script src="https://cdn.jsdelivr.net/npm/@jaames/iro@5"></script>

          當您像這樣手動包含庫時,iro.js 將在 window.iro 上全局可用。

          下載并托管自己

          < html > 
            < head > 
              <!-- ... --> 
              < script  src =" ./path/to/ iro.min.js " > </ script > 
            </ head > 
            <!-- ... - -> 
          </ html >

          以上就是小師妹為你推薦的6個熱門顏色選擇器組件了,關注w3cschool編程獅收獲更多技術干貨~

          取顏色:或輸入顏色值:OK或使用 HTML5:選擇的顏色:黑色文本陰影白色文本陰影red#ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)hsv(0, 100%, 100%)淡 / 暗:100% #ffffff95% #ffe5e590% #ffcccc85% #ffb3b380% #ff999975% #ff808070% #ff666665% #ff4d4d60% #ff333355% #ff1a1a50% #ff000045% #e6000040% #cc000035% #b3000030% #99000025% #80000020% #66000015% #4d000010% #3300005% #1a00000% #000000

          Hue

          Hue HexRgbHslHsv
          0 #ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)hsv(0, 100%, 100%)
          15 #ff4000rgb(255, 64, 0)hsl(15, 100%, 50%)hsv(15, 100%, 100%)
          30 #ff8000rgb(255, 128, 0)hsl(30, 100%, 50%)hsv(30, 100%, 100%)
          45 #ffbf00rgb(255, 191, 0)hsl(45, 100%, 50%)hsv(45, 100%, 100%)
          60 #ffff00rgb(255, 255, 0)hsl(60, 100%, 50%)hsv(60, 100%, 100%)
          75 #bfff00rgb(191, 255, 0)hsl(75, 100%, 50%)hsv(75, 100%, 100%)
          90 #80ff00rgb(128, 255, 0)hsl(90, 100%, 50%)hsv(90, 100%, 100%)
          105 #40ff00rgb(64, 255, 0)hsl(105, 100%, 50%)hsv(105, 100%, 100%)
          120 #00ff00rgb(0, 255, 0)hsl(120, 100%, 50%)hsv(120, 100%, 100%)
          135 #00ff40rgb(0, 255, 64)hsl(135, 100%, 50%)hsv(135, 100%, 100%)
          150 #00ff80rgb(0, 255, 128)hsl(150, 100%, 50%)hsv(150, 100%, 100%)
          165 #00ffbfrgb(0, 255, 191)hsl(165, 100%, 50%)hsv(165, 100%, 100%)
          180 #00ffffrgb(0, 255, 255)hsl(180, 100%, 50%)hsv(180, 100%, 100%)
          195 #00bfffrgb(0, 191, 255)hsl(195, 100%, 50%)hsv(195, 100%, 100%)
          210 #007fffrgb(0, 127, 255)hsl(210, 100%, 50%)hsv(210, 100%, 100%)
          225 #0040ffrgb(0, 64, 255)hsl(225, 100%, 50%)hsv(225, 100%, 100%)
          240 #0000ffrgb(0, 0, 255)hsl(240, 100%, 50%)hsv(240, 100%, 100%)
          255 #4000ffrgb(64, 0, 255)hsl(255, 100%, 50%)hsv(255, 100%, 100%)
          270 #7f00ffrgb(127, 0, 255)hsl(270, 100%, 50%)hsv(270, 100%, 100%)
          285 #bf00ffrgb(191, 0, 255)hsl(285, 100%, 50%)hsv(285, 100%, 100%)
          300 #ff00ffrgb(255, 0, 255)hsl(300, 100%, 50%)hsv(300, 100%, 100%)
          315 #ff00bfrgb(255, 0, 191)hsl(315, 100%, 50%)hsv(315, 100%, 100%)
          330 #ff0080rgb(255, 0, 128)hsl(330, 100%, 50%)hsv(330, 100%, 100%)
          345 #ff0040rgb(255, 0, 64)hsl(345, 100%, 50%)hsv(345, 100%, 100%)
          360 #ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)hsv(0, 100%, 100%)

          HSL Saturation

          Sat HexRgbHslHsv
          100% #ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)hsv(0, 100%, 100%)
          95% #f90606rgb(249, 6, 6)hsl(0, 95%, 50%)hsv(0, 97%, 98%)
          90% #f20d0drgb(242, 13, 13)hsl(0, 90%, 50%)hsv(0, 95%, 95%)
          85% #ec1313rgb(236, 19, 19)hsl(0, 85%, 50%)hsv(0, 92%, 93%)
          80% #e61919rgb(230, 25, 25)hsl(0, 80%, 50%)hsv(0, 89%, 90%)
          75% #df2020rgb(223, 32, 32)hsl(0, 75%, 50%)hsv(0, 86%, 88%)
          70% #d92626rgb(217, 38, 38)hsl(0, 70%, 50%)hsv(0, 82%, 85%)
          65% #d22d2drgb(210, 45, 45)hsl(0, 65%, 50%)hsv(0, 79%, 83%)
          60% #cc3333rgb(204, 51, 51)hsl(0, 60%, 50%)hsv(0, 75%, 80%)
          55% #c63939rgb(198, 57, 57)hsl(0, 55%, 50%)hsv(0, 71%, 78%)
          50% #bf4040rgb(191, 64, 64)hsl(0, 50%, 50%)hsv(0, 67%, 75%)
          45% #b94646rgb(185, 70, 70)hsl(0, 45%, 50%)hsv(0, 62%, 73%)
          40% #b34d4drgb(179, 77, 77)hsl(0, 40%, 50%)hsv(0, 57%, 70%)
          35% #ac5353rgb(172, 83, 83)hsl(0, 35%, 50%)hsv(0, 52%, 68%)
          30% #a65959rgb(166, 89, 89)hsl(0, 30%, 50%)hsv(0, 46%, 65%)
          25% #9f6060rgb(159, 96, 96)hsl(0, 25%, 50%)hsv(0, 40%, 63%)
          20% #996666rgb(153, 102, 102)hsl(0, 20%, 50%)hsv(0, 33%, 60%)
          15% #936c6crgb(147, 108, 108)hsl(0, 15%, 50%)hsv(0, 26%, 58%)
          10% #8c7373rgb(140, 115, 115)hsl(0, 10%, 50%)hsv(0, 18%, 55%)
          5% #867979rgb(134, 121, 121)hsl(0, 5%, 50%)hsv(0, 10%, 53%)
          0% #808080rgb(128, 128, 128)hsl(0, 0%, 50%)hsv(0, 0%, 50%)

          HSL 淡 / 暗

          Lum HexRgbHslHsv
          100% #ffffffrgb(255, 255, 255)hsl(0, 0%, 100%)hsv(0, 0%, 100%)
          95% #ffe5e5rgb(255, 229, 229)hsl(0, 100%, 95%)hsv(0, 10%, 100%)
          90% #ffccccrgb(255, 204, 204)hsl(0, 100%, 90%)hsv(0, 20%, 100%)
          85% #ffb3b3rgb(255, 179, 179)hsl(0, 100%, 85%)hsv(0, 30%, 100%)
          80% #ff9999rgb(255, 153, 153)hsl(0, 100%, 80%)hsv(0, 40%, 100%)
          75% #ff8080rgb(255, 128, 128)hsl(0, 100%, 75%)hsv(0, 50%, 100%)
          70% #ff6666rgb(255, 102, 102)hsl(0, 100%, 70%)hsv(0, 60%, 100%)
          65% #ff4d4drgb(255, 77, 77)hsl(0, 100%, 65%)hsv(0, 70%, 100%)
          60% #ff3333rgb(255, 51, 51)hsl(0, 100%, 60%)hsv(0, 80%, 100%)
          55% #ff1a1argb(255, 26, 26)hsl(0, 100%, 55%)hsv(0, 90%, 100%)
          50% #ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)hsv(0, 100%, 100%)
          45% #e60000rgb(230, 0, 0)hsl(0, 100%, 45%)hsv(0, 100%, 90%)
          40% #cc0000rgb(204, 0, 0)hsl(0, 100%, 40%)hsv(0, 100%, 80%)
          35% #b30000rgb(179, 0, 0)hsl(0, 100%, 35%)hsv(0, 100%, 70%)
          30% #990000rgb(153, 0, 0)hsl(0, 100%, 30%)hsv(0, 100%, 60%)
          25% #800000rgb(128, 0, 0)hsl(0, 100%, 25%)hsv(0, 100%, 50%)
          20% #660000rgb(102, 0, 0)hsl(0, 100%, 20%)hsv(0, 100%, 40%)
          15% #4d0000rgb(77, 0, 0)hsl(0, 100%, 15%)hsv(0, 100%, 30%)
          10% #330000rgb(51, 0, 0)hsl(0, 100%, 10%)hsv(0, 100%, 20%)
          5% #1a0000rgb(26, 0, 0)hsl(0, 100%, 5%)hsv(0, 100%, 10%)
          0% #000000rgb(0, 0, 0)hsl(0, 0%, 0%)hsv(0, 0%, 0%)

          HSV Saturation

          Sat HexRgbHslHsv
          100% #ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)hsv(0, 100%, 100%)
          95% #ff0d0drgb(255, 13, 13)hsl(0, 100%, 53%)hsv(0, 95%, 100%)
          90% #ff1919rgb(255, 25, 25)hsl(0, 100%, 55%)hsv(0, 90%, 100%)
          85% #ff2626rgb(255, 38, 38)hsl(0, 100%, 57%)hsv(0, 85%, 100%)
          80% #ff3333rgb(255, 51, 51)hsl(0, 100%, 60%)hsv(0, 80%, 100%)
          75% #ff4040rgb(255, 64, 64)hsl(0, 100%, 63%)hsv(0, 75%, 100%)
          70% #ff4d4drgb(255, 77, 77)hsl(0, 100%, 65%)hsv(0, 70%, 100%)
          65% #ff5959rgb(255, 89, 89)hsl(0, 100%, 68%)hsv(0, 65%, 100%)
          60% #ff6666rgb(255, 102, 102)hsl(0, 100%, 70%)hsv(0, 60%, 100%)
          55% #ff7373rgb(255, 115, 115)hsl(0, 100%, 73%)hsv(0, 55%, 100%)
          50% #ff8080rgb(255, 128, 128)hsl(0, 100%, 75%)hsv(0, 50%, 100%)
          45% #ff8c8crgb(255, 140, 140)hsl(0, 100%, 78%)hsv(0, 45%, 100%)
          40% #ff9999rgb(255, 153, 153)hsl(0, 100%, 80%)hsv(0, 40%, 100%)
          35% #ffa6a6rgb(255, 166, 166)hsl(0, 100%, 83%)hsv(0, 35%, 100%)
          30% #ffb3b3rgb(255, 179, 179)hsl(0, 100%, 85%)hsv(0, 30%, 100%)
          25% #ffbfbfrgb(255, 191, 191)hsl(0, 100%, 88%)hsv(0, 25%, 100%)
          20% #ffccccrgb(255, 204, 204)hsl(0, 100%, 90%)hsv(0, 20%, 100%)
          15% #ffd9d9rgb(255, 217, 217)hsl(0, 100%, 93%)hsv(0, 15%, 100%)
          10% #ffe6e6rgb(255, 230, 230)hsl(0, 100%, 95%)hsv(0, 10%, 100%)
          5% #fff2f2rgb(255, 242, 242)hsl(0, 100%, 98%)hsv(0, 5%, 100%)
          0% #ffffffrgb(255, 255, 255)hsl(0, 0%, 100%)hsv(0, 0%, 100%)

          HSV 亮 / 暗

          Value HexRgbHslHsv
          100% #ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)hsv(0, 100%, 100%)
          95% #f20000rgb(242, 0, 0)hsl(0, 100%, 48%)hsv(0, 100%, 95%)
          90% #e60000rgb(230, 0, 0)hsl(0, 100%, 45%)hsv(0, 100%, 90%)
          85% #d90000rgb(217, 0, 0)hsl(0, 100%, 43%)hsv(0, 100%, 85%)
          80% #cc0000rgb(204, 0, 0)hsl(0, 100%, 40%)hsv(0, 100%, 80%)
          75% #bf0000rgb(191, 0, 0)hsl(0, 100%, 38%)hsv(0, 100%, 75%)
          70% #b30000rgb(179, 0, 0)hsl(0, 100%, 35%)hsv(0, 100%, 70%)
          65% #a60000rgb(166, 0, 0)hsl(0, 100%, 33%)hsv(0, 100%, 65%)
          60% #990000rgb(153, 0, 0)hsl(0, 100%, 30%)hsv(0, 100%, 60%)
          55% #8c0000rgb(140, 0, 0)hsl(0, 100%, 28%)hsv(0, 100%, 55%)
          50% #800000rgb(128, 0, 0)hsl(0, 100%, 25%)hsv(0, 100%, 50%)
          45% #730000rgb(115, 0, 0)hsl(0, 100%, 23%)hsv(0, 100%, 45%)
          40% #660000rgb(102, 0, 0)hsl(0, 100%, 20%)hsv(0, 100%, 40%)
          35% #590000rgb(89, 0, 0)hsl(0, 100%, 18%)hsv(0, 100%, 35%)
          30% #4d0000rgb(77, 0, 0)hsl(0, 100%, 15%)hsv(0, 100%, 30%)
          25% #400000rgb(64, 0, 0)hsl(0, 100%, 13%)hsv(0, 100%, 25%)
          20% #330000rgb(51, 0, 0)hsl(0, 100%, 10%)hsv(0, 100%, 20%)
          15% #260000rgb(38, 0, 0)hsl(0, 100%, 8%)hsv(0, 100%, 15%)
          10% #1a0000rgb(26, 0, 0)hsl(0, 100%, 5%)hsv(0, 100%, 10%)
          5% #0d0000rgb(13, 0, 0)hsl(0, 100%, 3%)hsv(0, 100%, 5%)
          0% #000000rgb(0, 0, 0)hsl(0, 0%, 0%)hsv(0, 0%, 0%)

          RGB (Red, Green, Blue)

          RedGreenBlue
          25500

          rgb(255, 0, 0) #ff0000

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          者 | Adam Giese

          譯者 | 王強

          CSS 中有兩種顏色模型 RGB 和 HSL,如何用 JavaScript 控制它們?

          背景知識:顏色模型

          點開這篇文章的你,肯定是想要學習怎樣控制顏色的——我們后面就會講具體操作。但首先,我們需要對 CSS 如何標記顏色有一個基本的認識。CSS 使用的是兩種顏色模型:RGB 和 HSL,我們先簡單了解一下。

          1、RGB

          RGB 就是“紅色,綠色,藍色”的簡稱。這個模型由三個數字組成,每個數字表示其所代表的顏色在最終生成的顏色中有多高的亮度。在 CSS 中,每個數值的范圍都是 0-255,三個數值間用逗號分隔,作為 CSS rgb 函數的參數,例如:rgb(50,100,0)。

          RGB 是一種“增量”顏色系統。這意味著每個數字越高,最終生成的顏色就越亮。如果所有值都相等就生成灰度顏色;如果所有值都為零,結果為黑色;如果所有值都是 255,則結果為白色。

          此外你也可以使用十六進制表示法來標記 RGB 顏色,其中每種顏色的數值從 10 進制轉換為 16 進制。例如,rgb(50,100,0)用 16 進制就寫成#326400。

          雖然我個人比較習慣使用 RGB 模型(特別是十六進制),但我也經常發現它不易閱讀,也不容易操作。下面來看 HSL 模型。

          2、HSL

          HSL(https://codepen.io/AdamGiese/full/989988044f3b8cf6403e3c60f56dd612)是“色調,飽和度,光線”的簡稱,HSL 也包含三個值。色調值對應于色輪上的點,由 CSS 角度值表示,最常用的是度數單位。

          飽和度以百分比表示,是指顏色的強度。當飽和度為 100%時顏色最深,飽和度越低,顏色越淺,直到灰度為 0%。

          亮度也以百分比表示,指的是顏色有多亮。“常規”的亮度是 50%。無論色調和飽和度值如何,100%的亮度都是純白色,0%的亮度就是純黑色。

          我覺得 HSL 模型更直觀一些,顏色之間的關系更加明顯,控制顏色時只要簡單地調整幾個數字就可以了。

          3、顏色模型之間的轉換

          RGB 和 HSL 顏色模型都將顏色分解為各種屬性。要在不同模型之間進行轉換,我們首先需要計算這些屬性。

          除了色調,上面提到的所有數值都可以表示為百分比。就連 RGB 值也是用字節表示的百分比。在下面提到的公式和函數中,這些百分比將由 0 到 1 之間的小數來表示。

          這里提一下,我并不會深入探討這些數學知識;相比之下,我將簡要介紹一遍原始數學公式,然后將其轉換為 JavaScript 格式。

          4、從 RGB 模型中計算亮度

          亮度是三個 HSL 值中最容易計算的一個。其數學式如下,其中 M 是 RGB 值的最大值,m 是最小值:

          亮度的數學式

          用 JavaScript 函數寫成下面的形式:

          const rgbToLightness =(r,g,b)=>
           1/2 *(Math.max(r,g,b)+ Math.min(r,g,b));
          

          5、從 RGB 模型中計算飽和度

          飽和度僅比亮度稍微復雜一些。如果亮度為 0 或 1,則飽和度值為 0;否則,它基于下面的數學公式計算得出,其中 L 表示亮度:

          飽和度的數學式

          寫成 JavaScript:

          const rgbToSaturation = (r,g,b) => {
           const L = rgbToLightness(r,g,b);
           const max = Math.max(r,g,b);
           const min = Math.min(r,g,b);
           return (L === 0 || L === 1)
           ? 0
           : (max - min)/(1 - Math.abs(2 * L - 1));
          };
          

          6、從 RGB 模型中計算色調

          從 RGB 坐標中計算色調角度的公式有點復雜:

          色調的數學式

          寫成 JavaScript:

          const rgbToHue = (r,g,b) => Math.round(
           Math.atan2(
           Math.sqrt(3) * (g - b),
           2 * r - g - b,
           ) * 180 / Math.PI
          );
          

          最后 180 / Math.PI 的算法是將結果從弧度轉換為度。

          7、計算 HSL

          上面這些函數都可以包含在同一個功能函數里:

          const rgbToHsl = (r,g,b) => {
           const lightness = rgbToLightness(r,g,b);
           const saturation = rgbToSaturation(r,g,b);
           const hue = rgbToHue(r,g,b);
           return [hue, saturation, lightness];
          }
          

          8、從 HSL 模型中計算 RGB 值

          開始計算 RGB 之前,我們需要一些前提值。

          首先是“色度”值:

          色度的數學式

          還有一個臨時的色調值,我們將用它來確定我們所屬的色調圈的“段”:



          色調區間的數學式

          接下來,我們設一個“x”值,它將用作中間(第二大)組件值:

          臨時“x”值的數學式

          我們再設一個“m”值,用于調整各個亮度值:

          亮度匹配的數學式

          根據色調區間值,r,g 和 b 值將映射到 C,X 和 0:

          RGB 值的數學式,不考慮亮度

          最后,我們需要映射每個值以調整亮度:

          用 RGB 來解釋亮度的數學式

          將上面這些都寫到 JavaScript 函數中:

          const hslToRgb = (h,s,l) => {
           const C = (1 - Math.abs(2 * l - 1)) * s;
           const hPrime = h / 60;
           const X = C * (1 - Math.abs(hPrime % 2 - 1));
           const m = l - C/2;
           const withLight = (r,g,b) => [r+m, g+m, b+m];
          if (hPrime <= 1) { return withLight(C,X,0); } else
           if (hPrime <= 2) { return withLight(X,C,0); } else
           if (hPrime <= 3) { return withLight(0,C,X); } else
           if (hPrime <= 4) { return withLight(0,X,C); } else
           if (hPrime <= 5) { return withLight(X,0,C); } else
           if (hPrime <= 6) { return withLight(C,0,X); }
          }
          

          9、創建顏色對象

          為了便于在操作屬性時訪問,我們將創建一個 JavaScript 對象。把前面提到的這些函數打包起來就能創建這個對象:

          const rgbToObject = (red,green,blue) => {
           const [hue, saturation, lightness] = rgbToHsl(red, green, blue);
           return {red, green, blue, hue, saturation, lightness};
          }
          const hslToObject = (hue, saturation, lightness) => {
           const [red, green, blue] = hslToRgb(hue, saturation, lightness);
           return {red, green, blue, hue, saturation, lightness};
          }
          

          10、示例

          我強烈建議你花些時間看看這個示例:

          https://codepen.io/AdamGiese/full/86b353c35a8bfe0868a8b48683faf668

          從中了解調節各個屬性時其它屬性如何發生變化,這樣能幫助你更深入地了解兩種顏色模型是如何對應的。

          顏色控制

          現在我們已經知道怎樣在顏色模型之間進行轉換了,那么就來看看該如何控制這些顏色!

          1、更新屬性

          我們提到的所有顏色屬性都可以單獨控制,返回一個新的顏色對象。例如,我們可以編寫一個旋轉色調角度的函數:

          const rotateHue = rotation => ({hue, ...rest}) => {
           const modulo = (x, n) => (x % n + n) % n;
           const newHue = modulo(hue + rotation, 360);
          return { ...rest, hue: newHue };
          }
          

          rotateHue 函數會接受一個旋轉參數并返回一個新函數,該函數接受并返回一個顏色對象。這樣就可以輕松創建新的“旋轉”函數:

          const rotate30 = rotateHue(30);
          const getComplementary = rotateHue(180);
          const getTriadic = color => {
           const first = rotateHue(120);
           const second = rotateHue(-120);
           return [first(color), second(color)];
          }
          

          用這種方式,你也可以編寫加深或提亮顏色的函數——或者反過來,減淡或變暗也行。

          const saturate = x => ({saturation, ...rest}) => ({
           ...rest,
           saturation: Math.min(1, saturation + x),
          });
          const desaturate = x => ({saturation, ...rest}) => ({
           ...rest,
           saturation: Math.max(0, saturation - x),
          });
          const lighten = x => ({lightness, ...rest}) => ({
           ...rest,
           lightness: Math.min(1, lightness + x)
          });
          const darken = x => ({lightness, ...rest}) => ({
           ...rest,
           lightness: Math.max(0, lightness - x)
          });
          

          2、顏色謂詞

          除了顏色控制以外,你還可以編寫“謂詞”——亦即返回布爾值的函數。

          const isGrayscale = ({saturation}) => saturation === 0;
          const isDark = ({lightness}) => lightness < .5;
          

          3、處理顏色數組

          過濾器

          JavaScript [] .filter 方法會接受一個謂詞并返回一個新數組,其中包含所有“傳遞”的元素。我們在上一節中編寫的謂詞可以用在這里:

          const colors = [/* ... an array of color objects ... */];
          const isLight = ({lightness}) => lightness > .5;
          const lightColors = colors.filter(isLight);
          

          排序

          要對顏色數組進行排序,首先需要編寫一個“比較器”函數。此函數接受一個數組的兩個元素并返回一個數字來表示“贏家”。正數表示第一個元素應該先排序,而負數表示第二個元素應該先排序。零值表示平局。

          例如,這是一個比較兩種顏色亮度的函數:

          const compareLightness = (a,b) => a.lightness - b.lightness;
          

          這是一個比較飽和度的函數:

          const compareSaturation = (a,b) => a.saturation - b.saturation;
          

          為了防止代碼重復,我們可以編寫一個高階函數來返回一個比較函數來對比各種屬性:

          const compareAttribute = attribute =>
           (a,b) => a[attribute] - b[attribute];
          const compareLightness = compareAttribute('lightness');
          const compareSaturation = compareAttribute('saturation');
          const compareHue = compareAttribute('hue');
          

          平均屬性

          你可以搭配各種 JavaScript 數組方法來平衡顏色數組中的特定屬性。首先,你可以使用 reduce 求和并用 Array length 屬性分割來計算一個屬性的均值:

          const colors = [/* ... an array of color objects ... */];
          const toSum = (a,b) => a + b;
          const toAttribute = attribute => element => element[attribute];
          const averageOfAttribute = attribute => array =>
           array.map(toAttribute(attribute)).reduce(toSum) / array.length;
          

          你可以用它來“規范化”一組顏色:

          /* ... continuing */
          const normalizeAttribute = attribute => array => {
           const averageValue = averageOfAttribute(attribute)(array);
           const normalize = overwriteAttribute(attribute)(averageValue);
           return normalize(array);
          }
          const normalizeSaturation = normalizeAttribute('saturation');
          const normalizeLightness = normalizeAttribute('lightness');
          const normalizeHue = normalizeAttribute('hue');
          

          4、結論

          顏色是網絡不可或缺的一部分。將顏色分解為屬性就可以靈活控制它們,并創造出無限的可能。

          查看英文原文:

          https://blog.logrocket.com/how-to-manipulate-css-colors-with-javascript-fb547113a1b8

          福利推薦

          前端領域的技術演進一直要比其他技術快一些,這給前端工程師帶來持續的挑戰。這里整理了從 Vue 到 React、iOS 到 Andoid、再到前端架構體系的干貨課程,帶你解讀從前端小工到專家的實戰心法,高效解決 80% 的開發難題。


          主站蜘蛛池模板: 一区二区三区视频观看| 亚洲国产成人一区二区三区| 在线视频一区二区三区| 一区二区不卡视频在线观看| 成人免费区一区二区三区| 国产成人一区二区三区| 尤物精品视频一区二区三区| 精品成人av一区二区三区| 精品无码人妻一区二区三区品 | 一区二区高清在线| 无码人妻少妇色欲AV一区二区| 99偷拍视频精品一区二区| 国产自产V一区二区三区C| 日本一区二区三区在线看| 亚洲熟妇av一区| 色狠狠色噜噜Av天堂一区| 国产一区二区福利久久| 无码av免费毛片一区二区| 国产精品视频一区二区三区无码| 无码喷水一区二区浪潮AV| 69福利视频一区二区| 国精产品一区一区三区免费视频| 日韩视频在线观看一区二区| 亚洲日韩国产一区二区三区在线 | 综合一区自拍亚洲综合图区| 老熟女五十路乱子交尾中出一区| 三上悠亚亚洲一区高清| 国产主播福利精品一区二区| 亚洲一区二区三区高清在线观看| 亚洲AV福利天堂一区二区三 | 无码精品人妻一区二区三区影院 | 九九无码人妻一区二区三区| 久久综合亚洲色一区二区三区| 插我一区二区在线观看| 国产亚洲一区区二区在线| 国产精品免费大片一区二区| 天堂不卡一区二区视频在线观看| 国产福利一区二区| 精品视频在线观看一区二区| 国产乱码精品一区三上 | 亚洲国产美国国产综合一区二区|