En se basant sur la réponse de @desau et sur du code provenant d'ailleurs, voici une marche à suivre étape par étape pour jQuery :
function coloursBetween(fromColour, toColour, numberOfColours){
var colours = []; //holds output
var fromSplit = getRGBAValues(hexToRGBA(fromColour, 1.0)); //get raw values from hex
var toSplit = getRGBAValues(hexToRGBA(toColour, 1.0));
var fromRed = fromSplit[0]; //the red value as integer
var fromGreen = fromSplit[1];
var fromBlue = fromSplit[2];
var toRed = toSplit[0];
var toGreen = toSplit[1];
var toBlue = toSplit[2];
var difRed = toRed - fromRed; //difference between the two
var difGreen = toGreen - fromGreen;
var difBlue = toBlue - fromBlue;
var incrementPercentage = 1 / (numberOfColours-1); //how much to increment percentage by
for (var n = 0; n < numberOfColours; n++){
var percentage = n * incrementPercentage; //calculate percentage
var red = (difRed * percentage + fromRed).toFixed(0); //round em for legibility
var green = (difGreen * percentage + fromGreen).toFixed(0);
var blue = (difBlue * percentage + fromBlue).toFixed(0);
var colour = 'rgba(' + red + ',' + green + ',' + blue + ',1)'; //create string literal
colours.push(colour); //push home
}
return colours;
}
function getRGBAValues(string) {
var cleaned = string.substring(string.indexOf('(') +1, string.length-1);
var split = cleaned.split(",");
var intValues = [];
for(var index in split){
intValues.push(parseInt(split[index]));
}
return intValues;
}
function hexToRGBA(hex, alpha){
var c;
if(/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)){
c= hex.substring(1).split('');
if(c.length== 3){
c= [c[0], c[0], c[1], c[1], c[2], c[2]];
}
c= '0x'+c.join('');
return 'rgba('+[(c>>16)&255, (c>>8)&255, c&255].join(',')+','+alpha+')';
}
return rgba(0,0,0,1);
//throw new Error('Bad Hex');
}
Il existe trois fonctions :
coloursBetween(fromColour, toColour, numberOfColours)
getRGBAValues(string)
hexToRGBA(hex, alpha)
Appeler la fonction principale coloursBetween()
en indiquant la couleur de départ et la couleur d'arrivée, ainsi que le nombre total de couleurs que vous souhaitez obtenir. Ainsi, si vous demandez le retour de dix couleurs, vous obtiendrez la première couleur de départ + 8 couleurs dégradées + la dernière couleur de fin.
La fonction coloursBetween commence par convertir les couleurs hexagonales entrantes (par exemple #FFFFFF, #000000) en rgba (par exemple rgba(255,255,255,1) rgba(0,0,0,1)), puis soustrait les valeurs rouge, verte et bleue de chacune.
La différence entre les Rouges, les Verts et les Bleus est ensuite calculée. Dans cet exemple, elle est de -255 dans chaque cas. Un incrément est calculé et utilisé pour multiplier de nouvelles valeurs incrémentales pour le rouge, le vert et le bleu. L'alpha est toujours supposé être égal à un (opacité totale). La nouvelle valeur est ensuite ajoutée au tableau des couleurs et, une fois la boucle for terminée, elle est renvoyée.
Enfin, appelez comme ceci (en allant du rouge au bleu) :
var gradientColours = coloursBetween("#FF0000", "#0000FF", 5);
que vous pouvez utiliser pour quelque chose comme ceci :
1 votes
Ce que vous décrivez est la façon dont je le ferais : il suffit de faire une interpolation linéaire entre les points de départ et d'arrivée pour chacune des trois composantes de couleur.
2 votes
Veuillez noter qu'il existe différents types de dégradés : si vous souhaitez réaliser un dégradé qui passe par le rouge -> jaune -> vert -> bleu, vous devrez probablement obtenir les valeurs HSL plutôt que les valeurs RGB.