给定这个函数,我想用随机颜色生成器替换颜色。
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
我该怎么做?
给定这个函数,我想用随机颜色生成器替换颜色。
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
我该怎么做?
getRandomColor()
替代 "#0000FF"
:
function getRandomColor() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
function setRandomColor() {
$("#colorpad").css("background-color", getRandomColor());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="colorpad" style="width:300px;height:300px;background-color:#000">
</div>
<button onclick="setRandomColor()">Random Color</button>
我怀疑没有比这个更快或更短的方法:
"#" + ((1 << 24) * Math.random() | 0).toString(16).padStart(6, "0")
挑战!
'#'+(Math.random()*0xFFFFFF<<0).toString(16);
翻译为中文是:生成一个随机的16进制颜色代码,格式为 #xxxxxx
。其中 x
代表 0-F 的十六进制数字。 - Mohsen('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6)
将始终返回长度为6的值。尽管这种方法偶尔会返回像000cf4
或0000a7
这样的较小数字,这有点巧妙。在这些情况下,红色分量不参与生成随机颜色。 - brycMath.random().toString(16).slice(-6)
简短清晰 :) (该代码)生成一个六位的随机十六进制数。 - bryc\
#${Math.floor(Math.random() * 0x1000000).toString(16).padStart(6, 0)}`` - Константин Ван这是解决此问题的另一种方法。
我的目标是创建鲜明而独特的颜色。为了确保颜色不同,我避免使用随机生成器,并从彩虹中选择“均匀分布”的颜色。
这非常适合在Google Maps中创建突出显示的标记,具有最佳的“独特性”(即没有两个标记具有相似的颜色)。
/**
* @param numOfSteps: Total number steps to get color, means total colors
* @param step: The step number, means the order of the color
*/
function rainbow(numOfSteps, step) {
// This function generates vibrant, "evenly spaced" colours (i.e. no clustering). This is ideal for creating easily distinguishable vibrant markers in Google Maps and other apps.
// Adam Cole, 2011-Sept-14
// HSV to RBG adapted from: http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
var r, g, b;
var h = step / numOfSteps;
var i = ~~(h * 6);
var f = h * 6 - i;
var q = 1 - f;
switch(i % 6){
case 0: r = 1; g = f; b = 0; break;
case 1: r = q; g = 1; b = 0; break;
case 2: r = 0; g = 1; b = f; break;
case 3: r = 0; g = q; b = 1; break;
case 4: r = f; g = 0; b = 1; break;
case 5: r = 1; g = 0; b = q; break;
}
var c = "#" + ("00" + (~ ~(r * 255)).toString(16)).slice(-2) + ("00" + (~ ~(g * 255)).toString(16)).slice(-2) + ("00" + (~ ~(b * 255)).toString(16)).slice(-2);
return (c);
}
如果你想看看这个是如何实现的,请查看 Simple JavaScript Rainbow Color Generator for Google Map Markers。谁能打败它?
'#' + Math.random().toString(16).substr(-6);
这保证了它始终起作用: http://jsbin.com/OjELIfo/2/edit
基于eterps的评论,如果随机颜色的十六进制表示非常短(0.730224609375
=> 0.baf
),则上面的代码仍然可以生成更短的字符串。
此代码应在所有情况下工作:
function makeRandomColor(){
var c = '';
while (c.length < 7) {
c += (Math.random()).toString(16).substr(-6).substr(-1)
}
return '#' + c;
}
0.125
时,结果是"#0.2"
(无效) - Kamil Kiełczewski0
是 Math.random
的一个有效返回值,而 '#' + (0).toString(16).substr(-6)
就是 "#0"
。如果您不介意,我会在 _它保证一直工作_
上画个删除线以避免给别人造成困惑? - bluenote10你也可以在每个好的浏览器上使用 HSL(http://caniuse.com/#feat=css3-colors)。
function randomHsl() {
return 'hsla(' + (Math.random() * 360) + ', 100%, 50%, 1)';
}
这将给你只有明亮的颜色,你可以试着调整亮度、饱和度和透明度。
// es6
const randomHsl = () => `hsla(${Math.random() * 360}, 100%, 50%, 1)`
'hsla(' + (Math.floor(Math.random()*360) + ', 100%, 70%, 1)'
。 - Redoman不需要使用十六进制字母的哈希值。JavaScript可以自行完成此操作:
function get_random_color() {
function c() {
var hex = Math.floor(Math.random()*256).toString(16);
return ("0"+String(hex)).substr(-2); // pad with zero
}
return "#"+c()+c()+c();
}
我喜欢这个代码:'#' + (Math.random().toString(16) + "000000").substring(2,8)
'#' + Math.floor(Math.random()*16777215).toString(16);
- Mohammad Anini'#' + (0.125).toString(16).substring(2, 8) === '#2'
。这是危险的,因为概率很低(我认为是4096分之1),所以有可能会通过测试的错误。你应该使用'#' + Math.random().toString(16) + "000000").substring(2, 8)
。 - James'#' + (Math.random().toString(16) + "000000").substring(2,8)
。 - James'#' + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0');
感谢Haytam分享padStart
解决十六进制代码长度问题。
随机颜色生成并带有亮度控制:
function getRandColor(brightness){
// Six levels of brightness from 0 to 5, 0 being the darkest
var rgb = [Math.random() * 256, Math.random() * 256, Math.random() * 256];
var mix = [brightness*51, brightness*51, brightness*51]; //51 => 255/5
var mixedrgb = [rgb[0] + mix[0], rgb[1] + mix[1], rgb[2] + mix[2]].map(function(x){ return Math.round(x/2.0)})
return "rgb(" + mixedrgb.join(",") + ")";
}
如果你像我一样是一个新手,在十六进制等方面毫无头绪,这可能更容易理解。
function r() {
return Math.floor(Math.random() * 256);
}
const color = "rgb(" + r() + "," + r() + "," + r() + ")";
您只需要得到一个字符串,例如"rgb(255, 123, 220)"
。