so if have text "click me brighten" has css color property of dark green hex color "#00801a" want make when click on it, makes lighter green. likewise, if blue color, clicking on make lighter blue. want know if there way change css color without knowing actual color.
converting hsv change brigthness
see full code example on jsfiddle
this version uses hsv
. convert original rgb
value hsv
, change value of v
lighter color. got rgbtohsv
pointy answer, added little fix gray. , got hsvtorgb
on website
when page loads getting rgb
converting hsv
changing v
value, convert rgb
, change css
of element new value.
function appendcolor(light) { $(".dark").each(function(i){ // rgb existing elements var color = $(this).css("background-color"); color = color.replace(/[^0-9,]+/g, ""); var red = color.split(",")[0]; var gre = color.split(",")[1]; var blu = color.split(",")[2]; // convert rgb hsv var hsv = rgbtohsv(red,gre,blu); // convert hsv rgb modifing `v` param var rgb = hsvtorgb(hsv.h, hsv.s, light); // creates new div , set new background // appends content color = "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")"; $("<div />") .css("background", color) .attr("title", color) .appendto($(".light").parent()); $("<span />").html(" ").appendto($(".light").parent()) }); $("<br />").appendto($(".light").parent()) } // tested values appendcolor(25); appendcolor(50); appendcolor(75); appendcolor(90); appendcolor(95); appendcolor(97); appendcolor(99); appendcolor(100);
result:
increasing color values highest color
the divs
on top represents dark colors (rgb) #801a00
, #00801a
, #1a0080
, #d2d2d2
<div id="red" class="dark red"></div> <div id="green" class="dark green"></div> <div id="blue" class="dark blue"></div> <div id="gray" class="dark gray"></div> <br /> <div id="lred" class="lred"></div> <div id="lgreen" class="lgreen"></div> <div id="lblue" class="lblue"></div> <div id="lgray" class="lgray"></div>
the divs
on bottom light color dark.
when click dark div retrieve background-color
, split values , send function lighthen
. function make color more light.
function lighthen(red, green, blue) { var max = ([red,green,blue].sort(function(l,r){return r-l}))[0]; var multiplier = max; multiplier = (multiplier / 255) + 1; // if still dark, make lighten more if (multiplier < 1.5) multiplier = 1.9; // if gets white, move away bit if ((max * multiplier) > 255) { multiplier = (multiplier / 230) + 1; } var r = math.round(red * multiplier); var g = math.round(green * multiplier); var b = math.round(blue * multiplier); if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255; return "rgb(" + r + "," + g + "," + b + ")"; }
when dark div clicked, new color calculated , changed on correspondent div
.
$(".dark").click(function(){ var color = $(this).css("background-color"); color = color.replace(/[^0-9,]+/g, ""); var red = color.split(",")[0]; var gre = color.split(",")[1]; var blu = color.split(",")[2]; $("#l" + $(this).attr("id")) .css("background", lighthen(red, gre, blu)); });
resulting in
Comments
Post a Comment