Skip to content

Instantly share code, notes, and snippets.

@kamicane
Created April 18, 2015 09:12
Show Gist options
  • Save kamicane/40c0f002a4e41998c386 to your computer and use it in GitHub Desktop.
Save kamicane/40c0f002a4e41998c386 to your computer and use it in GitHub Desktop.
"use strict";
var rgb = require("rgb");
var lerp = function(from, to, delta) {
return (to - from) * delta + from;
};
var convertToPct = function(c, i) {
if (i === 3) return c;
return c / 255;
};
module.exports = function(gradient) {
for (var i = 0; i < gradient.length; i ++) {
var item = gradient[i],
color = item.color;
if (typeof color === "string") item.color = rgb(color, true).map(convertToPct);
}
return function(delta) {
if (delta > 1) delta = 1;
if (delta < 0) delta = 0;
var c0, c1;
for (var i = 0; i < gradient.length; i ++) {
c0 = gradient[i];
c1 = gradient[i + 1];
if (delta >= c0.stop && delta <= c1.stop) break;
}
var start = c0.stop;
var end = c1.stop;
var d = (delta - start) / (end - start);
var color1 = c0.color,
color2 = c1.color;
return [
lerp(color1[0], color2[0], d),
lerp(color1[1], color2[1], d),
lerp(color1[2], color2[2], d),
lerp(color1[3], color2[3], d)
];
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment