【发布时间】:2010-12-23 12:10:14
【问题描述】:
我创建了一个颜色值数组,表示颜色从红色到蓝色的平滑过渡。
现在我希望这个数组将您从红色变为蓝色,然后再返回。显而易见的解决方案是将数组的反转附加到数组中。
我已经编写了代码来执行此操作,但它没有按照我的理解工作。相反,它正在创建反向数组,重复。不是“红到蓝,蓝到红”,而是“蓝到红,蓝到红”。
显然,我还没有掌握 javascript 中数组的一些行为。
我该怎么办?
我的第一次尝试是这样的:
colors = colors.concat(colors.reverse());
根据第一个 stackoverflow 答案,我尝试了这个:
var arrayCopy = colors;
arrayCopy.reverse();
colors = colors.concat(arrayCopy);
但这会产生相同的结果!
关于上下文,这里是周围的代码:
///////////////////////////////////////////////////////////
// Creating the array which takes you from Red to Blue
//
var colorSteps = 400;
var startColor = [255, 0, 0];
var endColor = [0, 127, 255];
var steps = new Array();
var j = 0;
for (j = 0; j < 3; ++j) {
steps[j] = (endColor[j] - startColor[j]) / colorSteps;
}
var colors = Array();
for (j = 0; j < colorSteps; ++j) {
colors[j] = [
Math.floor(startColor[0] + steps[0] * j),
Math.floor(startColor[1] + steps[1] * j),
Math.floor(startColor[2] + steps[2] * j)
];
}
////////////////////////////////////////////////////////
// Here's the bit where I'm trying to make it a mirror
// of itself!
//
// It ain't working
//
colors = colors.concat(colors.reverse());
///////////////////////////////////////////////////////
// Demonstrating what the colors are
//
j = 0;
var changeColorFunction = function () {
if (++j >= colors.length) {
j = 0;
}
var colorName = "rgb(" + colors[j][0] + ", " + colors[j][1] + ", " + colors[j][2] + ")";
debugText.style.background = colorName;
debugText.innerHTML = j;
}
setInterval(changeColorFunction, 10);
【问题讨论】:
标签: javascript