Javascript数组-如何选择一个随机十六进制值?

Javascript数组-如何选择一个随机十六进制值?,javascript,arrays,Javascript,Arrays,我有一个部分十六进制值的数组,它会随机添加字母,形成一个完整的十六进制值 然后将其随机应用于div层,有效地为其着色不同的颜色。然而,我现在得到的是“马蒂斯”效果,而不是一种颜色的变化 如果强制var color=setHex()至var color='#CC0'在getRandomColor函数中,您将看到我想要的效果 我想知道当我只传递一个十六进制值时为什么会发生“马蒂斯”效应。我该怎么阻止这一切 参见此处示例: //设置十六进制 函数setHex(){ var hexArray=['#CC

我有一个部分十六进制值的数组,它会随机添加字母,形成一个完整的十六进制值

然后将其随机应用于div层,有效地为其着色不同的颜色。然而,我现在得到的是“马蒂斯”效果,而不是一种颜色的变化

如果强制
var color=setHex()
var color='#CC0'
getRandomColor函数中,您将看到我想要的效果

我想知道当我只传递一个十六进制值时为什么会发生“马蒂斯”效应。我该怎么阻止这一切

参见此处示例:

//设置十六进制
函数setHex(){
var hexArray=['#CC0'、'#FF9'、'#339'];
var randomHex=hexArray[Math.floor(Math.random()*hexArray.length)];
document.getElementById('inner')。innerHTML=randomHex;
返回随机十六进制;
}
//随机颜色
函数getRandomColor(){
变量字母='0123456789ABCDEF'。拆分('');
var color=setHex();
对于(变量i=0;i<3;i++){
颜色+=字母[Math.round(Math.random()*7)];
}
返回颜色;
}
//双属性随机颜色
函数按钮单击(){
var i,j,colorblock=document.getElementsByClassName('shade');
对于(i=0,j=colorblock.length;i
var base=setHex();
//随机颜色
函数getRandomColor(){
变量字母='0123456789ABCDEF'。拆分('');
var颜色=基础;
对于(变量i=0;i<3;i++){
颜色+=字母[Math.round(Math.random()*7)];
}
返回颜色;
}
在方法外部声明基是有效的


解释

在这种方法中:

for (i=0, j=colorblock.length; i<j; i++) {
    colorblock[i].style.background = getRandomColor();
}
for(i=0,j=colorblock.length;i
var base=setHex();
//随机颜色
函数getRandomColor(){
变量字母='0123456789ABCDEF'。拆分('');
var颜色=基础;
对于(变量i=0;i<3;i++){
颜色+=字母[Math.round(Math.random()*7)];
}
返回颜色;
}
在方法外部声明基是有效的


解释

在这种方法中:

for (i=0, j=colorblock.length; i<j; i++) {
    colorblock[i].style.background = getRandomColor();
}

for(i=0,j=colorblock.length;i每次调用
getRandomColor
调用
setHex
并拾取另一个随机基色时。只需设置一次基色,将其存储在变量中并使用它

例如:

var hexBase;

function setHex() {
    var hexArray = ['#CC0','#FF9','#339'];
    if (!hexBase) {
         hexBase = hexArray[Math.floor(Math.random() * hexArray.length)];
    }
    return hexBase; 
} 

似乎您已经接近这个解决方案,因为您正在将setHex的结果存储在div中,但是您再也没有检查过它。另外,您不需要在DOM中存储东西,因为您可以将它们存储在JavaScript中


最后,如果您想避免使用全局变量,您可以将整个内容包装在一个函数中(例如,您的
onload
函数或iLife)。

每次调用
getRandomColor
并选择另一个随机基色时,只需设置一次基色,将其存储在变量中并使用它

例如:

var hexBase;

function setHex() {
    var hexArray = ['#CC0','#FF9','#339'];
    if (!hexBase) {
         hexBase = hexArray[Math.floor(Math.random() * hexArray.length)];
    }
    return hexBase; 
} 

似乎您已经接近这个解决方案,因为您正在将setHex的结果存储在div中,但是您再也没有检查过它。另外,您不需要在DOM中存储东西,因为您可以将它们存储在JavaScript中

最后,如果您想避免使用全局变量,可以将整个内容包装在函数中(例如,您的
onload
函数或iLife)。

为什么? 因为函数
getRandomColor()
调用
setHex()
,每次都返回其他内容

如何停止

var color = setHex();
for (i=0, j=colorblock.length; i<j; i++) {
        colorblock[i].style.background = getRandomColor(color);
    }   
}
var color=setHex();
对于(i=0,j=colorblock.length;i为什么?
因为函数
getRandomColor()
调用
setHex()
,每次都返回其他内容

如何停止

var color = setHex();
for (i=0, j=colorblock.length; i<j; i++) {
        colorblock[i].style.background = getRandomColor(color);
    }   
}
var color=setHex();

对于(i=0,j=colorblock.length;我只是出于好奇,为什么在
Math.random()*7
inside
getRandomColor()中使用7
?嗨,Anthony,它让我可以控制颜色。我不想有太多的变化。很高兴知道我如何能做得更好。啊,我明白了,我只是好奇它的重要性-不确定我是否遗漏了什么。它没什么问题!只是出于好奇,你为什么在
Math.random()中使用7*7
inside
getRandomColor()
?嗨,Anthony,它让我可以控制颜色。我不想有太多的变化。很高兴知道我如何能做得更好。啊,我明白了,我只是好奇它的意义-不确定我是否错过了什么。它没什么问题!现在很有意义!非常感谢!现在很有意义!非常感谢!