首页 > 其他分享 >理解了 HSL 颜色表示法,就能实现 ColorPicker 组件

理解了 HSL 颜色表示法,就能实现 ColorPicker 组件

时间:2023-07-30 17:06:50浏览次数:36  
标签:elif ColorPicker max value 表示法 HSL const 100 360

HSL颜色表示法是一种常用的颜色表示方法,它由色相(H)、饱和度(S)和亮度(L)三个参数组成。色相表示颜色的种类,饱和度表示颜色的纯度,亮度表示颜色的明暗程度。HSL颜色表示法相对于其他颜色表示法来说,更符合人类对颜色的感知和理解,因此被广泛应用于图形界面设计和网页开发等领域。

实现一个ColorPicker组件需要理解HSL颜色表示法的,并通过代码实现以下功能:

  1. 将RGB颜色转换为HSL颜色表示法

将RGB颜色转换为HSL颜色表示法的方法如下:

pythondef rgb_to_hsl(r, g, b):
    r, g, b = r / 255.0, g / 255.0, b / 255.0
    max_value = max(r, g, b)
    min_value = min(r, g, b)
    diff = max_value - min_value
    if diff == 0:
        h = 0
    elif max_value == r:
        h = (60 * ((g - b) / diff) + 360) % 360
    elif max_value == g:
        h = (60 * ((b - r) / diff) + 120) % 360
    elif max_value == b:
        h = (60 * ((r - g) / diff) + 240) % 360
    s = 0 if max_value == 0 else diff / max_value
    l = max_value + (min_value - max_value) * (256 / 256)
    return h, s * 100, l * 100
def rgb_to_hsl(r, g, b):
    r, g, b = r / 255.0, g / 255.0, b / 255.0
    max_value = max(r, g, b)
    min_value = min(r, g, b)
    diff = max_value - min_value
    if diff == 0:
        h = 0
    elif max_value == r:
        h = (60 * ((g - b) / diff) + 360) % 360
    elif max_value == g:
        h = (60 * ((b - r) / diff) + 120) % 360
    elif max_value == b:
        h = (60 * ((r - g) / diff) + 240) % 360
    s = 0 if max_value == 0 else diff / max_value
    l = max_value + (min_value - max_value) * (256 / 256)
    return h, s * 100, l * 100
  1. 将HSL颜色表示法转换为RGB颜色表示法

将HSL颜色表示法转换为RGB颜色表示法的方法如下:

pythondef hsl_to_rgb(h, s, l):
    h, s, l = h / 360, s / 100, l / 100
    if l == 0:
        r, g, b = 0, 0, 0
    elif s == 0:
        r, g, b = l, l, l
    else:
        i = int(h / 60)
        f = (h / 60) - i
        p = l * (1 - s)
        q = l * (1 - f * s)
        t = l * (1 - (1 - f) * s)
        if i == 0:
            r, g, b = l, t, p
        elif i == 1:
            r, g, b = q, l, p
        elif i == 2:
            r, g, b = p, l, t
        elif i == 3:
            r, g, b = p, q, l
        elif i == 4:
            r, g, b = t, p, l
        else:
            r, g, b = l, p, q
    r, g, b = int(r * 255), int(g * 255), int(b * 255)
    return r, g, b
def hsl_to_rgb(h, s, l):
    h, s, l = h / 360, s / 100, l / 100
    if l == 0:
        r, g, b = 0, 0, 0
    elif s == 0:
        r, g, b = l, l, l
    else:
        i = int(h / 60)
        f = (h / 60) - i
        p = l * (1 - s)
        q = l * (1 - f * s)
        t = l * (1 - (1 - f) * s)
        if i == 0:
            r, g, b = l, t, p
        elif i == 1:
            r, g, b = q, l, p
        elif i == 2:
            r, g, b = p, l, t
        elif i == 3:
            r, g, b = p, q, l
        elif i == 4:
            r, g, b = t, p, l
        else:
            r, g, b = l, p, q
    r, g, b = int(r * 255), int(g * 255), int(b * 255)
    return r, g, b
  1. 在ColorPicker组件中实现颜色选择和调整功能

在ColorPicker组件中,用户可以通过拖动滑块或者手动输入数值来选择或者调整颜色。具体实现方法如下:

javascript// HTML代码
<div class="color-picker">
    <div class="color-picker-slider"></div>
    <input type="text" class="color-picker-input">
</div>

// JavaScript代码
const slider = document.querySelector('.color-picker-slider')
const input = document.querySelector('.color-picker-input')

function updateColor() {
    const h = slider.value / 360
    const s = (1 - Math.abs((255 - input.value) / 255)) * 100
    const l = (input.value / 255) * 100
    const rgb = [...[h, s, l].map(round)].join(',')
    const hex = '#' + rgbToHex(rgb)
    document.body.style.backgroundColor = hex
}

slider.addEventListener('input', updateColor)
// HTML代码
<div class="color-picker">
    <div class="color-picker-slider"></div>
    <input type="text" class="color-picker-input">
</div>

// JavaScript代码
const slider = document.querySelector('.color-picker-slider')
const input = document.querySelector('.color-picker-input')

function updateColor() {
    const h = slider.value / 360
    const s = (1 - Math.abs((255 - input.value) / 255)) * 100
    const l = (input.value / 255) * 100
    const rgb = [...[h, s, l].map(round)].join(',')
    const hex = '#' + rgbToHex(rgb)
    document.body.style.backgroundColor = hex
}

slider.addEventListener('input', updateColor)

标签:elif,ColorPicker,max,value,表示法,HSL,const,100,360
From: https://blog.51cto.com/u_16209800/6901221

相关文章

  • 用例图表示法指南
    用例图是一种 UML图。以下是UML用例图中支持的统一建模语言(UML)符号列表:图标名称用例用例表示可以通过访问系统或软件应用程序来实现的用户目标。在VisualParadigm通过在用例下创建子序列图,您可以利用子图功能来描述用例与用户之间的交互。您还可以使用“事件流”编辑器描述用例......
  • RGB、HSV、HSL和CMYK颜色空间
    简介这四种颜色空间在不同的应用领域有不同的用途:RGB主要用于计算机图形学和显示设备中,可以通过调整红、绿、蓝三个分量的值来实现颜色的调整。HSV和HSL主要用于图像处理和设计领域,可以更直观地表示颜色的属性,比如色相、饱和度和亮度。CMYK主要用于印刷行业,可以准确地表示颜......
  • 邻接矩阵表示法
    邻接矩阵表示法使用邻接矩阵创建无向图需要一个顶点表和邻接矩阵邻接矩阵的存储结构采用邻接矩阵建立无向网输入总顶点数和总边数。输入点的信息存入顶点表中。初始化化为邻接矩阵,使每个权值初始化为极大值。构造邻接矩阵算法实现在图中查找顶点代码实现#inclu......
  • ECMAScript6新特性【对象的扩展(属性的简洁表示法) 对象的新增方法 、运算符的扩展 】(
    ......
  • 最小表示法 学习笔记
    描述:给出一个字符串s,将s循环移位若干次之后使得字符串的字典序最小。朴素的思路:对于每一个位置为结果字符串的开头去暴力做。显然最坏复杂度O(|S|^2)于是考虑优化这个过程。假设对于不同的两个下表i和j,如果有s[i,i+1,..,i+k-1]=s[j,j+1,..,j+k-1]和s[i+k]>s[j+k],那这个时候i已......
  • Python实现Json文件转为点表示法(Dot-Notation)
    将Json转换为点表示法有很多用途,本文基于Python实现一个简单demo来转换。【原文见我的博客,如有更新请博客园的不一定及时同步改:https://blog.jfz.me/2023/python-json-to-dot-notation.html】{"vehicle":{"car":{"bmw":true,"audi"......
  • 最小表示法
    思路考虑将原串复制一遍,就可以得到所有循环同构串,然后先枚举两个位置\(i,j\),分别对应第一个和第二个位置。然后往后枚举,遇到第一个不同的位置,那么另外一个大的数对应的......
  • 类与类之间的关系表示法
    1.关联关系:       2.聚合关系:  3.组合关系:  4.依赖关系:  5.继承关系:  6.实现关系: ......
  • C#基于HSL批量读取三菱PLC地址 反射/数据写入Model实体类
    usingHslCommunication;usingHslCommunication.Profinet.Melsec;usingNewtonsoft.Json;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usin......
  • 十六进制表示法
    一个字节由8位组成。在二进制表示法中,它的值域是00000000——11111111。如果看成十进制整数,它的值域就是0——255。此两种符号表示法对于描述位模式来说都不是非常方便:二进......