2017-12-28 16:59:18 +13:00

63 lines
1.7 KiB
JavaScript

function Color(hex = '#000000', rgb)
{
if(rgb){
this.rgb = rgb;
this.hex = "#"+("0" + parseInt(rgb.r,10).toString(16)).slice(-2)+("0" + parseInt(rgb.g,10).toString(16)).slice(-2)+("0" + parseInt(rgb.b,10).toString(16)).slice(-2);
}
else{
this.hex = hex;
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(this.hex);
this.rgb = {r: parseInt(result[1], 16),g: parseInt(result[2], 16),b: parseInt(result[3], 16)}
}
this.r = this.rgb.r;
this.g = this.rgb.g;
this.b = this.rgb.b;
this.average = parseInt((this.r + this.g + this.b)/3)
this.invert = {r:255-this.rgb.r, g:255-this.rgb.g, b:255-this.rgb.b};
this.rgba = function()
{
return "rgba("+this.rgb().r+","+this.rgb().g+","+this.rgb().b+",1)";
}
this.floats = function()
{
var rgb = this.rgb;
return { r:rgb.r/255, g:rgb.g/255, b:rgb.b/255 }
}
this.render = function()
{
return this.hex;
}
this.rgb_to_hex = function(rgb)
{
return "#"+("0" + parseInt(rgb[0],10).toString(16)).slice(-2)+("0" + parseInt(rgb[1],10).toString(16)).slice(-2)+("0" + parseInt(rgb[2],10).toString(16)).slice(-2);
}
this.brightness = function()
{
return this.rgb() ? (this.rgb().r + this.rgb().g + this.rgb().b)/3 : 0;
}
this.style = function()
{
return this.brightness() > 150 ? "bright" : "dark";
}
this.tween = function(target,value)
{
var c1 = this.floats();
var c2 = target.floats();
var r = ((255 * c1.r) * value) + ((255 * c2.r) * (1-value));
var g = ((255 * c1.g) * value) + ((255 * c2.g) * (1-value));
var b = ((255 * c1.b) * value) + ((255 * c2.b) * (1-value));
var rgb = [parseInt(r),parseInt(g),parseInt(b)];
var hex = new Color().rgb_to_hex(rgb);
return hex;
}
}