当前位置:首页 > JavaScript

js色相实现

2026-04-05 21:26:49JavaScript

色相(Hue)的基本概念

色相是色彩的基本属性之一,指颜色的种类(如红、绿、蓝等),通常用角度表示(0°~360°)。在CSS和JavaScript中,色相常用于HSL(Hue, Saturation, Lightness)或HSV(Hue, Saturation, Value)颜色模型。

在JavaScript中操作色相

使用HSL颜色模型

HSL颜色格式为 hsl(hue, saturation%, lightness%),其中色相值为0~360的数值:

// 设置一个红色的HSL值(色相0°)
const redHsl = 'hsl(0, 100%, 50%)';

// 动态修改色相(例如调整为蓝色)
const blueHsl = `hsl(240, 100%, 50%)`;

通过RGB转换色相

若需从RGB中提取或修改色相,需先将RGB转换为HSL:

js色相实现

function rgbToHsl(r, g, b) {
    r /= 255, g /= 255, b /= 255;
    const max = Math.max(r, g, b), min = Math.min(r, g, b);
    let h, s, l = (max + min) / 2;

    if (max === min) {
        h = s = 0; // 灰度
    } else {
        const d = max - min;
        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
        switch (max) {
            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
            case g: h = (b - r) / d + 2; break;
            case b: h = (r - g) / d + 4; break;
        }
        h *= 60;
    }
    return [h, s * 100, l * 100];
}

修改色相并转回RGB

function hslToRgb(h, s, l) {
    s /= 100, l /= 100;
    const k = n => (n + h / 30) % 12;
    const a = s * Math.min(l, 1 - l);
    const f = n => l - a * Math.max(-1, Math.min(k(n) - 3, 9 - k(n), 1));
    return [255 * f(0), 255 * f(8), 255 * f(4)];
}

实际应用示例

动态调整DOM元素的色相

const element = document.getElementById('target');
element.style.backgroundColor = `hsl(${currentHue}, 100%, 50%)`;

// 每隔100毫秒增加色相值(颜色渐变效果)
setInterval(() => {
    currentHue = (currentHue + 1) % 360;
    element.style.backgroundColor = `hsl(${currentHue}, 100%, 50%)`;
}, 100);

使用Canvas绘制色相环

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const radius = 100;

for (let angle = 0; angle < 360; angle++) {
    const x = radius * Math.cos(angle * Math.PI / 180);
    const y = radius * Math.sin(angle * Math.PI / 180);
    ctx.fillStyle = `hsl(${angle}, 100%, 50%)`;
    ctx.fillRect(x + radius, y + radius, 5, 5);
}
document.body.appendChild(canvas);

注意事项

  • 色相值超过360时会自动循环(如361°等同于1°)。
  • 在HSL中,饱和度和亮度的范围为0%~100%,但色相仅依赖角度值。
  • 对于性能敏感的场景(如动画),建议使用CSS变量或WebGL着色器优化。

标签: 色相js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…