Я просто хотел следовать здесь;
Благодаря как quixoto и PATRICK Dw для ваших подробных комментариев и ответов. Я, однако, пошел с немного другим решением. Хотя я хотел сохранить свой первоначальный подход к использованию одномерного массива, это намного проще и эффективнее, чем я могу видеть, чтобы добавить другое измерение, как показано ниже. Используемый здесь массив демонстрирует предсказуемость, но это может быть не так, как только проект будет завершен.
var colors = [
[0, '121D4A'],
[10800, '000000'],
[21600, 'FF5900'],
[32400, 'D3EEF0'],
[43200, '7DCDFF'],
[54000, '7DA6FF'],
[64800, 'FF5900'],
[75600, '31428C'],
[86399, '121D4A'],
];
function gradientStop(color1, color2, gradStop){
var r = Math.floor(gradStop * parseInt(color2.substr(0, 2), 16) + (1 - gradStop) * parseInt(color1.substr(0, 2), 16)).toString(16);
var g = Math.floor(gradStop * parseInt(color2.substr(2, 2), 16) + (1 - gradStop) * parseInt(color1.substr(2, 2), 16)).toString(16);
var b = Math.floor(gradStop * parseInt(color2.substr(4, 2), 16) + (1 - gradStop) * parseInt(color1.substr(4, 2), 16)).toString(16);
return (r.length < 2 ? '0' + r : r) + (g.length < 2 ? '0' + g : g) + (b.length < 2 ? '0' + b : b);
}
function getColor(colors, currentIndex){
for(var i = 0, m = colors.length; i < m; i++){
if(currentIndex >= colors[i][0]){
if(typeof(colors[i + 1]) !== 'undefined'){
if(currentIndex <= colors[i + 1][0]){
return gradientStop(colors[i][1], colors[i + 1][1], (currentIndex - colors[i][0])/(colors[i + 1][0] - colors[i][0]));
}
}
}
}
}
А также; Да Hemlock Это было расширение по моему вопросу на Programmatic gradient stops with Javascript, следовательно функция gradientStop()
.
Вы имеете в виду ассоциативный массив? 'myarray ['0'] = 0x0000FF;'? – stef
Было бы легко с объектом. Намного сложнее с массивом. –
@Tomcat: Существует ли предсказуемый порядок индексов массива? – user113716