如何获取 javascript 中的每个有效十六进制代码
How to get every valid hex code in javascript
这是我两天前开始工作的一件小事,我认为这会是一个快速的小脑问题,然后我就回去吃午饭了。但是我在挣扎。我想获得所有有效的十六进制颜色代码的数组。最好不要让浏览器崩溃。
这是我到目前为止想出的。
app.directive 'randomColor', () ->
link: (scope) ->
scope.colors = new Array
col = 0x0
while col <= 0xFFF
if (col > 0x111 && col < 0xFFF)
scope.colors.push '#' + col
col++
autocolor = (hexcode) ->
colorChange = () ->
$("#colorvomit").append("<span style='padding: 1px 10px 1px 10px;background-color: " +hexcode+";border: 1px solid black;'></span>")
setTimeout(colorChange, 5000)
_.each(scope.colors, autocolor)
切记我使用的是 coffescript 和 angular js。使用下划线库,所以我可以使用 _.each.
所以我得到了这个结果
你可以看到底部有很多白色方块,它会一直持续很长时间,因为它会返回无效的十六进制代码,如 #1223(4 位)。
所以这是我的问题,什么是获得所有有效十六进制颜色代码的最佳方法让我说 6 长我有 3 长(FFF),因为否则它会崩溃而不会得到无效代码。感谢您的所有帮助,我认为这是一个有趣的问题。
我已完成研究,但找不到任何类似的东西。因为我们希望它们都按顺序排列,例如 111 112 113 等...
请记住 256*256*256 = 16777216 因此执行需要一些时间。
var result = '';
for(var i=0;i<256;i++)
for(var j=0;j<256;j++)
for(var k=0;k<256;k++)
{r = i.toString(16);
g = j.toString(16);
b = k.toString(16);
if(r.length!=1||g.length!=1||b.length!=1){
if(r.length==1)r='0'+r;
if(g.length==1)g='0'+g;
if(b.length==1)b='0'+b;
}//will use 3 length color unless one of r,g or b is to digit then 6 length will be used.
result += r + g + b + '<br/>';
}
document.write(result);
如果你想要它在数组中,那么:
var result = [];
for(var i=0;i<256;i+=16)
for(var j=0;j<256;j+=16)
for(var k=0;k<256;k+=16)
{r = i.toString(16);
g = j.toString(16);
b = k.toString(16);
if(r.length!=1||g.length!=1||b.length!=1){
if(r.length==1)r='0'+r;
if(g.length==1)g='0'+g;
if(b.length==1)b='0'+b;
} //will use 3 length color unless one of r,g or b is to digit then 6 length will be used.
result.push(r + g + b);
}
见DEMO
这是一个图形DEMO,由于我们无法显示数百万种颜色,因此颜色数量有所减少。
我没有使用嵌套循环,而是将十进制 from/to 转换为十六进制。没有更好,只是不同。 Fiddle 下面,显示操作。
*编辑:此代码修改为运行全部1600万种颜色。 fiddle 仍然使用每种颜色 8 位(#000;
简要表示法),因此 运行
不会花很长时间
var $cv= $("#colorvomit");
for(var col=parseInt("000000", 16); col<=parseInt("ffffff", 16); col++) {
var hex = col.toString(16);
hex = '0'.repeat(6-hex.length) + hex;
$cv.append('<span style="background-color:#'+hex+';"> </span>');
}
这是我两天前开始工作的一件小事,我认为这会是一个快速的小脑问题,然后我就回去吃午饭了。但是我在挣扎。我想获得所有有效的十六进制颜色代码的数组。最好不要让浏览器崩溃。
这是我到目前为止想出的。
app.directive 'randomColor', () ->
link: (scope) ->
scope.colors = new Array
col = 0x0
while col <= 0xFFF
if (col > 0x111 && col < 0xFFF)
scope.colors.push '#' + col
col++
autocolor = (hexcode) ->
colorChange = () ->
$("#colorvomit").append("<span style='padding: 1px 10px 1px 10px;background-color: " +hexcode+";border: 1px solid black;'></span>")
setTimeout(colorChange, 5000)
_.each(scope.colors, autocolor)
切记我使用的是 coffescript 和 angular js。使用下划线库,所以我可以使用 _.each.
所以我得到了这个结果
你可以看到底部有很多白色方块,它会一直持续很长时间,因为它会返回无效的十六进制代码,如 #1223(4 位)。
所以这是我的问题,什么是获得所有有效十六进制颜色代码的最佳方法让我说 6 长我有 3 长(FFF),因为否则它会崩溃而不会得到无效代码。感谢您的所有帮助,我认为这是一个有趣的问题。
我已完成研究,但找不到任何类似的东西。因为我们希望它们都按顺序排列,例如 111 112 113 等...
请记住 256*256*256 = 16777216 因此执行需要一些时间。
var result = '';
for(var i=0;i<256;i++)
for(var j=0;j<256;j++)
for(var k=0;k<256;k++)
{r = i.toString(16);
g = j.toString(16);
b = k.toString(16);
if(r.length!=1||g.length!=1||b.length!=1){
if(r.length==1)r='0'+r;
if(g.length==1)g='0'+g;
if(b.length==1)b='0'+b;
}//will use 3 length color unless one of r,g or b is to digit then 6 length will be used.
result += r + g + b + '<br/>';
}
document.write(result);
如果你想要它在数组中,那么:
var result = [];
for(var i=0;i<256;i+=16)
for(var j=0;j<256;j+=16)
for(var k=0;k<256;k+=16)
{r = i.toString(16);
g = j.toString(16);
b = k.toString(16);
if(r.length!=1||g.length!=1||b.length!=1){
if(r.length==1)r='0'+r;
if(g.length==1)g='0'+g;
if(b.length==1)b='0'+b;
} //will use 3 length color unless one of r,g or b is to digit then 6 length will be used.
result.push(r + g + b);
}
见DEMO
这是一个图形DEMO,由于我们无法显示数百万种颜色,因此颜色数量有所减少。
我没有使用嵌套循环,而是将十进制 from/to 转换为十六进制。没有更好,只是不同。 Fiddle 下面,显示操作。
*编辑:此代码修改为运行全部1600万种颜色。 fiddle 仍然使用每种颜色 8 位(#000;
简要表示法),因此 运行
var $cv= $("#colorvomit");
for(var col=parseInt("000000", 16); col<=parseInt("ffffff", 16); col++) {
var hex = col.toString(16);
hex = '0'.repeat(6-hex.length) + hex;
$cv.append('<span style="background-color:#'+hex+';"> </span>');
}