Javascript color smooth transition
I saw someone who made a color transition from a to b but they were using RGB and calculating it mathematically. I have thought about this before and I made a function that drew a linear gradient on a hidden canvas and grabs the color of each pixel. I'm not sure if this is any faster than any other method but I do know it is accurate and you don't have to do any extra math.
Here is the code:(I'm tired of typing this out and then closing and losing the window without posting it)
(function () {
var pixel = function pixel(arr) {
var _pixel = Object.create(null);
_pixel.r = arr[0];
_pixel.g = arr[1];
_pixel.b = arr[2];
_pixel.a = arr[3];
_pixel.toString = function () {
return "RGBA(" + _pixel.r + "," + _pixel.g + "," + _pixel.b + "," + _pixel.a + ")";
};
return _pixel;
};
var colors = function colors(color1, color2, steps) {
var canvas = document.createElement('canvas'),
c = canvas.getContext('2d');
canvas.width = parseInt(steps, 10);
canvas.height = 1;
var grd = c.createLinearGradient(0, 0, canvas.width, 0);
grd.addColorStop(0, color1);
grd.addColorStop(1, color2);
c.fillStyle = grd;
c.fillRect(0, 0, canvas.width, 1);
var imgd = c.getImageData(0, 0, canvas.width, 1);
var pix = [].slice.call(imgd.data);
var pixels = [];
while (pix.length) {
pixels.push(Object.create(pixel(pix.splice(0, 4))));
}
console.log(pixels);
return pixels;
};
//this is just extra to display it and an example of the
colors("gold", "maroon", 40).forEach(function (e, i, a) {
var s = document.createElement('span');
s.style.border = "black 1px solid";
s.style.display = "inline-block";;
s.style.width = "1em";
s.style.height = "1em";
s.style.background = e;
document.body.appendChild(s);
});
})();Written by Darby Rathbone
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Colors
Authors
Did you know?
JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.
Security insights from Cside
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#