- 测试
【免费下载链接】chancejs
Chance - Random generator helper for JavaScript
chance.color()是 Chance.js 提供的随机颜色生成器,可在 HTML/CSS 常用颜色表示法中随机产出颜色值。本文以 docs/web/color.md 为骨架,结合 chance.js 中的Chance.prototype.color实现(第 1424~1565 行)与 test/test.web.js 中的断言用例,完整讲解六种颜色格式、灰度模式、大小写控制以及通道级参数控制,帮助你直接在项目中使用 Chance 生成可用的随机颜色数据。
一、color() 基本用法
color()的默认行为是在六种随机格式中随机挑选一种,返回一个随机颜色:
chance.color() => '#79c157'- 返回值为字符串,格式不定;
- 六种基础类型为
hex、shorthex、rgb、rgba、0x、name,均可在 HTML 或 CSS 中直接使用(0x和name除外,前者常见于脚本/汇编场景的十六进制写法,后者是 CSS 命名颜色); - 可以通过
format选项显式指定类型,通过grayscale开启灰度、casing控制字母大小写。
在源码中,默认格式正是从这六种中随机挑选:
// chance.js 第 1497-1498 行 options = initOptions(options, { format: this.pick(['hex', 'shorthex', 'rgb', 'rgba', '0x', 'name']), ... });二、六种颜色格式详解
使用format选项可以锁定输出格式,每次生成结果保持一致的结构,便于上层代码按固定模式解析。
1. hex(标准十六进制)
chance.color({format: 'hex'}) => '#d67118'- 形如
#rrggbb,长度为 7(含#); - 每个通道取 0~255 的随机整数,再转为两位十六进制;
- 测试断言:
color.length === 7且匹配/#[a-z0-9]+/m(见 test/test.web.js 第 135~142 行)。
2. shorthex(短十六进制)
chance.color({format: 'shorthex'}) => '#60f'- 形如
#rgb,长度为 4,每个通道仅保留一位十六进制(0~15 之间的值); - 源码中对应
hex.call(this, 1, 3, true)(chance.js 第 1541~1542 行),每位由hex({min: 0, max: 15})生成。
3. rgb(三通道整数)
chance.color({format: 'rgb'}) => 'rgb(110,52,164)'- 形如
rgb(r,g,b),三个通道均为 0~255 的随机整数; - 测试断言三个通道均落在
0 <= x <= 255(test/test.web.js 第 174~187 行)。
4. rgba(带透明度)
chance.color({ format:'rgba' }) => 'rgba(76,11,110,0.1284)'- 形如
rgba(r,g,b,a),alpha 通道是floating({min: 0, max: 1})生成的浮点数; - 测试断言 alpha 落在
0 <= a <= 1(test/test.web.js 第 202~217 行)。
5. 0x(脚本/底层常用十六进制)
chance.color({format: '0x'}) => '0x67ae0b'- 形如
0xrrggbb,长度为 8,不带#; - 源码中为
'0x' + hex.call(this, 2, 6)(chance.js 第 1550~1552 行),适合生成类似嵌入式或二进制数据填充场景的颜色常量。
6. name(CSS 命名颜色)
chance.color({ format:'name' }) => 'DarkOrange'- 从 Chance 内置的
colorNames颜色名词典中随机挑取一个,如AliceBlue、DarkOrange、Tomato等; - 数据源位于 chance.js 第 4559~4567 行,共收录约 140 个 CSS 标准颜色名,包含常用色与全系列淡色(
WhiteSmoke、LavenderBlush、OldLace等); - 实现上直接返回
this.pick(this.get("colorNames"))(chance.js 第 1553~1555 行)。
非法格式会抛错
如果传入不在这六种范围内的format,会抛出RangeError:
chance.color({format: 'banana'}) // RangeError源码第 1556~1558 行明确抛出:Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".,测试用例test('color() bogus format throws error')也验证了这一点(test/test.web.js 第 270~273 行)。
三、灰度模式 grayscale
设置grayscale: true后,生成的 RGB 三通道值完全相等,得到纯灰颜色:
chance.color({grayscale: true}) => '#e2e2e2'- 灰度模式下各格式输出均为灰色:
#e2e2e2、rgb(x,x,x)、rgba(x,x,x,a)等; - 测试通过断言相邻通道相等来验证:
color.slice(1,3) === color.slice(3,5)(test/test.web.js 第 144~153 行); - 底层实现中,灰度值由
gray()辅助函数把单一随机值复制三份(chance.js 第 1461~1463 行):function gray(value, delimiter) { return [value, value, value].join(delimiter || ''); }
四、大小写控制 casing
十六进制类格式(hex、shorthex、0x)默认输出小写字母,设置casing: 'upper'可强制大写:
chance.color({casing: 'upper'}) => '#29CFA7'- 默认值为
lower(chance.js 第 1500 行); - 源码第 1560~1562 行对最终字符串执行
toUpperCase():if (options.casing === 'upper' ) { colorValue = colorValue.toUpperCase(); } - 测试断言输出字符串从第 1 到第 6 位字符均为大写(test/test.web.js 第 256~268 行)。
五、通道级参数:精确控制 RGB 与 Alpha(源码级进阶)
文档之外的源码中还提供了通道级控制参数,用于生成限定色域的颜色。以下参数来自 chance.js 第 1497~1511 行的默认配置:
| 参数 | 默认值 | 含义 |
|---|---|---|
min/max | 0/255 | 未指定通道时的通用 RGB 取值范围 |
min_red/max_red | 跟随min/max | 红色通道最小/最大值 |
min_green/max_green | 跟随min/max | 绿色通道最小/最大值 |
min_blue/max_blue | 跟随min/max | 蓝色通道最小/最大值 |
min_alpha/max_alpha | 0/1 | alpha 透明度取值范围 |
源码注释中的完整示例(chance.js 第 1455 行):
var light_red = chance.color({format: 'hex', min_red: 200, max_red: 255, max_green: 0, max_blue: 0, min_alpha: .2, max_alpha: .3});- 当只给
min/max时,三个通道共用同一范围(第 1524~1529 行用min_rgb/max_rgb兜底); - 当指定了任一通道边界时(
min_red !== undefined || ...),hex 输出会按各自通道范围生成(第 1486~1488 行); shorthex会先把通道范围映射到 0~15 的个位数十六进制(Math.floor(min_red / 16),第 1484 行);- 灰度模式下若同时给出通道边界,则用三通道均值折算灰度范围(第 1532~1535 行):
min_rgb = (min_red + min_green + min_blue) / 3; max_rgb = (max_red + max_green + max_blue) / 3; - alpha 通道只对
rgba生效,由floating({min: min_alpha, max: max_alpha})生成(第 1467 行)。
这些参数适合制作"暖色系"、"深色背景"、"半透明叠加层"等有约束的配色方案,例如生成一张页面可用的浅红色系色板。
六、底层实现原理与调用链
color()的实现要点如下,便于理解各选项之间的组合关系:
- 选项合并:所有选项先经过
initOptions与默认值合并(chance.js 第 78~90 行),未传入的参数一律使用默认值; - 辅助函数:内部定义
gray()(灰度三通道复制)与rgb()、hex()两个闭包工厂(第 1465~1495 行),分别组装字符串; - 基础随机源:通道整数由
natural()产生(0~255),alpha 由floating()产生(0~1),十六进制字符由hex()配合pad()补齐两位,实现上复用 Chance 的 hex()(第 387~395 行)与natural()核心; - 格式分发:
switch式if/else分发六种格式,name直接走colorNames词典(第 1553~1555 行); - 大小写后处理:统一在分支结束后对字符串做
toUpperCase(),因此casing对所有含字母的格式(hex/shorthex/0x)均生效。
七、测试验证一览
test/test.web.js 第 134~273 行对color()进行了 1000 次迭代的随机断言测试,覆盖:
- 默认与指定
hex的输出形态(长度 7、#前缀、小写十六进制); hex/shorthex/rgb/rgba四种格式的灰度输出通道相等性;shorthex长度 4、0x长度 8 的形态约束;rgb/rgba各通道值域在 0~255、alpha 在 0~1;name返回合法字符串;casing: 'upper'全部字符大写;- 非法
format抛出异常。
这些测试同时是理解各格式边界条件的快速入口,可作为功能验证与二次开发的参考。
八、典型应用场景
- 前端 UI 填充:为图表、卡片、占位头像批量生成配色,配合
format: 'hex'直接作为 CSS 颜色使用; - Mock 数据接口:与 docs/web/email.md、docs/web/domain.md 等 Web 数据生成器组合,构造完整的假页面数据;
- 可视化演示:用
grayscale: true生成统一的灰色调占位元素,或结合通道参数生成同色系渐变样本; - 测试数据:
casing与固定format的组合可让断言规则保持稳定(参考 test/test.web.js 的写法)。
小结
chance.color()以一行调用覆盖了 HTML/CSS 中最常用的六种颜色表示法,并提供灰度、大小写与通道级范围控制。掌握format、grayscale、casing三个核心选项,再配合源码中的min_red/max_red等通道参数,即可在 Chance.js 项目中稳定生成任意风格的随机颜色数据。
- 测试
【免费下载链接】chancejs
Chance - Random generator helper for JavaScript
相关推荐
从安装到部署:uiw组件库完整使用教程(附TypeScript示例)
从安装到部署:uiw组件库完整使用教程(附TypeScript示例) uiw是一个基于React 16+的高质量UI组件库,提供了丰富的组件和工具,帮助开发者快
Chance.js latitude() 完全指南:随机纬度生成、精度控制与 DD/DDM/DMS 三种格式
Chance.js latitude 完全指南:随机纬度生成、精度控制与 DD/DDM/DMS 三种格式 本指南围绕 Chance 随机生成器库(Chance
测试Chance.js coordinates() 随机坐标生成器完整指南:DD / DDM / DMS 三种格式与精度控制
Chance.js coordinates 随机坐标生成器完整指南:DD / DDM / DMS 三种格式与精度控制 本篇指南以 Chance.js 官方文档
测试
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考