当前位置:首页 > JavaScript

js色相实现

2026-03-14 03:20:24JavaScript

色相(Hue)的实现方法

在JavaScript中,色相可以通过多种方式实现,包括使用CSS滤镜、Canvas操作或第三方库。以下是几种常见的实现方法:

使用CSS滤镜

通过CSS的filter属性可以调整元素的色相。hue-rotate函数接受一个角度值(0-360deg),对元素进行色相旋转。

.element {
  filter: hue-rotate(90deg);
}

在JavaScript中动态修改色相:

js色相实现

const element = document.querySelector('.element');
element.style.filter = 'hue-rotate(180deg)';

使用Canvas修改色相

通过Canvas的getImageDataputImageData可以手动处理像素数据,实现色相调整。

function adjustHue(imageData, degrees) {
  const data = imageData.data;
  for (let i = 0; i < data.length; i += 4) {
    const r = data[i], g = data[i+1], b = data[i+2];
    const hsv = rgbToHsv(r, g, b);
    hsv[0] = (hsv[0] + degrees / 360) % 1;
    const rgb = hsvToRgb(hsv[0], hsv[1], hsv[2]);
    data[i] = rgb[0]; data[i+1] = rgb[1]; data[i+2] = rgb[2];
  }
  return imageData;
}

使用第三方库

chroma.jstinycolor这样的库提供了色相调整的便捷方法。

js色相实现

import chroma from 'chroma-js';
const color = chroma('red').set('hsl.h', 120).hex();

RGB转HSV公式

手动实现色相调整需要RGB与HSV/HSL之间的转换公式:

RGB转HSV: $$ \begin{aligned} &\text{max} = \max(r, g, b), \text{min} = \min(r, g, b)\ &\text{h} = \begin{cases} 0 & \text{if max} = \text{min}\ 60 \times \frac{g - b}{\text{max} - \text{min}} + 0 & \text{if max} = r \text{ and } g \geq b\ 60 \times \frac{g - b}{\text{max} - \text{min}} + 360 & \text{if max} = r \text{ and } g < b\ 60 \times \frac{b - r}{\text{max} - \text{min}} + 120 & \text{if max} = g\ 60 \times \frac{r - g}{\text{max} - \text{min}} + 240 & \text{if max} = b \end{cases}\ &\text{s} = \begin{cases} 0 & \text{if max} = 0\ 1 - \frac{\text{min}}{\text{max}} & \text{otherwise} \end{cases}\ &\text{v} = \text{max} / 255 \end{aligned} $$

HSV转RGB: $$ \begin{aligned} &\text{h}' = \text{h} / 60, \text{c} = \text{v} \times \text{s}\ &\text{x} = \text{c} \times (1 - |(\text{h}' \mod 2) - 1|)\ &\text{m} = \text{v} - \text{c}\ &(\text{r}, \text{g}, \text{b}) = \begin{cases} (\text{c}, \text{x}, 0) & \text{if } 0 \leq \text{h}' < 1\ (\text{x}, \text{c}, 0) & \text{if } 1 \leq \text{h}' < 2\ (0, \text{c}, \text{x}) & \text{if } 2 \leq \text{h}' < 3\ (0, \text{x}, \text{c}) & \text{if } 3 \leq \text{h}' < 4\ (\text{x}, 0, \text{c}) & \text{if } 4 \leq \text{h}' < 5\ (\text{c}, 0, \text{x}) & \text{if } 5 \leq \text{h}' < 6 \end{cases}\ &(\text{r}, \text{g}, \text{b}) = ((\text{r} + \text{m}) \times 255, (\text{g} + \text{m}) \times 255, (\text{b} + \text{m}) \times 255) \end{aligned} $$

以上方法可以根据具体需求选择实现方式。CSS滤镜适合简单的前端效果,Canvas适合图像处理,而第三方库则提供了更高级的功能封装。

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

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…