Use three sliders to control RGB values and update Hex and HSL strings.
- Hex:
- RGB:
- HSL:
Setting Up the Sliders
First we need to construct the HTML for the UI. This will consist of three sliders and three output boxes.
<div class="sliders yui3-skin-sam"> <dl> <dt>R: <span id="r-val" class="val"></span></dt><dd id="r-slider"></dd> <dt>G: <span id="g-val" class="val"></span></dt><dd id="g-slider"></dd> <dt>B: <span id="b-val" class="val"></span></dt><dd id="b-slider"></dd> </dl> </div> <div class="color"></div> <div class="output"> <dl> <dt>Hex:</dt><dd id="hex"></dd> <dt>RGB:</dt><dd id="rgb"></dd> <dt>HSL:</dt><dd id="hsl"></dd> </dl> </div>
Now we give the list some CSS to make it a little easier to use.
.sliders { display: inline-block; zoom: 1; *display: inline; width: 210px; vertical-align: middle; overflow: hidden; } .color { display: inline-block; zoom:1; *display: inline; width: 100px; height: 100px; border: 1px solid rgba(0, 0, 0, 0.5); -webkit-box-shadow: 1px 1px 2px 0px rgba(0, 0, 0, 0.3); -moz-box-shadow: 1px 1px 2px 0px rgba(0, 0, 0, 0.3); box-shadow: 1px 1px 2px 0px rgba(0, 0, 0, 0.3); margin: 0 20px; vertical-align: middle; } .output { display: inline-block; zoom: 1; *display: inline; vertical-align: middle; overflow: hidden; } .sliders dt, .output dt { float: left; clear: left; width: 50px; height: 40px; line-height: 40px; } .sliders dd, .output dd { float: left; height: 40px; line-height: 40px; margin: 0; }
Setting Up the YUI Instance
Now we need to create our YUI instance and tell it to load the color
and slider
modules.
YUI().use('slider', 'color', function (Y) { // Code Here. });
Building the UI
The first bit of YUI we need to implement is creating our slider instances. We set the initial value of the sliders to a random position between 0
and 255
.
We follow that up by assigning nodes to variables. This helps prevent multiple look ups of the same node as we move the sliders.
Next we render our slider instances into their containers.
// sliders var rSlider = new Y.Slider({ min: 0, max: 255, value: Math.round(Math.random()*255) }), gSlider = new Y.Slider({ min: 0, max: 255, value: Math.round(Math.random()*255) }), bSlider = new Y.Slider({ min: 0, max: 255, value: Math.round(Math.random()*255) }), // slider values rVal = Y.one('#r-val'), gVal = Y.one('#g-val'), bVal = Y.one('#b-val'), // color strings hex = Y.one('#hex'), rgb = Y.one('#rgb'), hsl = Y.one('#hsl'), // color chip color = Y.one('.color'); // render sliders rSlider.render('#r-slider'); gSlider.render('#g-slider'); bSlider.render('#b-slider');
Binding Events
After we have our UI built and ready, we need to bind events to the slider
instances for R, G, and B values.
In each event callback we update the text value in the UI, then call updateColors()
to update the color strings.
In updateColors()
we get to see the use of Y.Color
. We create rgbStr
from an array of color values. We can then create the hex and hsl value strings with toHex()
and toHSL()
respectively.
// register update events rSlider.after('thumbMove', function(e) { rVal.set('text', rSlider.get('value')); updateColors(); }); gSlider.after('thumbMove', function(e) { gVal.set('text', gSlider.get('value')); updateColors(); }); bSlider.after('thumbMove', function(e) { bVal.set('text', bSlider.get('value')); updateColors(); }); // update the colors strings function updateColors() { var r = rSlider.get('value'), g = gSlider.get('value'), b = bSlider.get('value'), rgbStr = Y.Color.fromArray([r,g,b], Y.Color.TYPES.RGB); color.setStyle('backgroundColor', rgbStr); rgb.set('text', rgbStr); hex.set('text', Y.Color.toHex(rgbStr)); hsl.set('text', Y.Color.toHSL(rgbStr)); }
Start it up!
Now that we have our UI built and events bound, we need to do an initial update to the UI.
First we display the each slider
's current value. Next we update the color strings with updateColors()
.
rVal.set('text', rSlider.get('value')); gVal.set('text', gSlider.get('value')); bVal.set('text', bSlider.get('value')); updateColors();
The Whole Example
Now let's see it all together!
<!DOCTYPE html> <html> <head> <style> .sliders { display: inline-block; zoom: 1; *display: inline; width: 210px; vertical-align: middle; overflow: hidden; } .color { display: inline-block; zoom:1; *display: inline; width: 100px; height: 100px; border: 1px solid rgba(0, 0, 0, 0.5); -webkit-box-shadow: 1px 1px 2px 0px rgba(0, 0, 0, 0.3); -moz-box-shadow: 1px 1px 2px 0px rgba(0, 0, 0, 0.3); box-shadow: 1px 1px 2px 0px rgba(0, 0, 0, 0.3); margin: 0 20px; vertical-align: middle; } .output { display: inline-block; zoom: 1; *display: inline; vertical-align: middle; overflow: hidden; } .sliders dt, .output dt { float: left; clear: left; width: 50px; height: 40px; line-height: 40px; } .sliders dd, .output dd { float: left; height: 40px; line-height: 40px; margin: 0; } </style> </head> <body> <div class="sliders yui3-skin-sam"> <dl> <dt>R: <span id="r-val" class="val"></span></dt><dd id="r-slider"></dd> <dt>G: <span id="g-val" class="val"></span></dt><dd id="g-slider"></dd> <dt>B: <span id="b-val" class="val"></span></dt><dd id="b-slider"></dd> </dl> </div> <div class="color"></div> <div class="output"> <dl> <dt>Hex:</dt><dd id="hex"></dd> <dt>RGB:</dt><dd id="rgb"></dd> <dt>HSL:</dt><dd id="hsl"></dd> </dl> </div> <script> YUI().use('slider', 'color', function(Y){ // sliders var rSlider = new Y.Slider({ min: 0, max: 255, value: Math.round(Math.random()*255) }), gSlider = new Y.Slider({ min: 0, max: 255, value: Math.round(Math.random()*255) }), bSlider = new Y.Slider({ min: 0, max: 255, value: Math.round(Math.random()*255) }), // slider values rVal = Y.one('#r-val'), gVal = Y.one('#g-val'), bVal = Y.one('#b-val'), // color strings hex = Y.one('#hex'), rgb = Y.one('#rgb'), hsl = Y.one('#hsl'), // color chip color = Y.one('.color'); // render sliders rSlider.render('#r-slider'); gSlider.render('#g-slider'); bSlider.render('#b-slider'); // register update events rSlider.after('thumbMove', function(e) { rVal.set('text', rSlider.get('value')); updateColors(); }); gSlider.after('thumbMove', function(e) { gVal.set('text', gSlider.get('value')); updateColors(); }); bSlider.after('thumbMove', function(e) { bVal.set('text', bSlider.get('value')); updateColors(); }); // update the colors strings function updateColors() { var r = rSlider.get('value'), g = gSlider.get('value'), b = bSlider.get('value'), rgbStr = Y.Color.fromArray([r,g,b], Y.Color.TYPES.RGB); color.setStyle('backgroundColor', rgbStr); rgb.set('text', rgbStr); hex.set('text', Y.Color.toHex(rgbStr)); hsl.set('text', Y.Color.toHSL(rgbStr)); } rVal.set('text', rSlider.get('value')); gVal.set('text', gSlider.get('value')); bVal.set('text', bSlider.get('value')); updateColors(); }); </script> </body> </html>