Colour Picker 2.0

Created Tuesday 16th of September 2008 by Andreas Lagerkvist
Copyright © 2008 Andreas Lagerkvist (andreaslagerkvist.com)

Please have a look at the "Other Resources" for bug reports or further help on jQuery. Do not post bug reports or feature requests as comments to unrelated articles. If bug reporting on bugtracker.a-framework.org fails, e-mail me.

What it Does

Use this plug-in on a normal <select>-element filled with colours to turn it in to a colour-picker widget that allows users to view all the colours in the drop-down as well as enter their own, preferred, custom colour. Only about 1k compressed.

How to Use

jQuery('select[name="colour"]').colourPicker({ico: 'my-icon.gif', title: 'Select a colour from the list'}); Would replace the select with 'my-icon.gif' which, when clicked, would open a dialogue with the title 'Select a colour from the list'.

You can close the colour-picker without selecting a colour by clicking anywhere outside the colour-picker box.

Here's a handy PHP-function to generate a list of "web-safe" colours:

function gwsc() {
    
$cs = array('00''33''66''99''CC''FF');

    for(
$i=0$i<6$i++) {
        for(
$j=0$j<6$j++) {
            for(
$k=0$k<6$k++) {
                
$c $cs[$i] .$cs[$j] .$cs[$k];
                echo 
"<option value=\"$c\">#$c</option>\n";
            }
        }
    }
}

Use it like this: <select name="colour"><?php gwsc(); ?></select>.

Example

Example Code

HTML

<div id="jquery-colour-picker-example">
<
p>
    <
label>
        
Pick a colour<br />
        <
select name="colour">
            <
option value="ffffff">#ffffff</option>
            
<option value="ffccc9">#ffccc9</option>
            
<option value="ffce93">#ffce93</option>
            
<option value="fffc9e">#fffc9e</option>
            
<option value="ffffc7">#ffffc7</option>
            
<option value="9aff99">#9aff99</option>
            
<option value="96fffb">#96fffb</option>
            
<option value="cdffff">#cdffff</option>
            
<option value="cbcefb">#cbcefb</option>
            
<option value="cfcfcf">#cfcfcf</option>
            
<option value="fd6864">#fd6864</option>
            
<option value="fe996b">#fe996b</option>
            
<option value="fffe65">#fffe65</option>
            
<option value="fcff2f">#fcff2f</option>
            
<option value="67fd9a">#67fd9a</option>
            
<option value="38fff8">#38fff8</option>
            
<option value="68fdff">#68fdff</option>
            
<option value="9698ed">#9698ed</option>
            
<option value="c0c0c0">#c0c0c0</option>
            
<option value="fe0000">#fe0000</option>
            
<option value="f8a102">#f8a102</option>
            
<option value="ffcc67">#ffcc67</option>
            
<option value="f8ff00">#f8ff00</option>
            
<option value="34ff34">#34ff34</option>
            
<option value="68cbd0">#68cbd0</option>
            
<option value="34cdf9">#34cdf9</option>
            
<option value="6665cd">#6665cd</option>
            
<option value="9b9b9b">#9b9b9b</option>
            
<option value="cb0000">#cb0000</option>
            
<option value="f56b00">#f56b00</option>
            
<option value="ffcb2f">#ffcb2f</option>
            
<option value="ffc702">#ffc702</option>
            
<option value="32cb00">#32cb00</option>
            
<option value="00d2cb">#00d2cb</option>
            
<option value="3166ff">#3166ff</option>
            
<option value="6434fc">#6434fc</option>
            
<option value="656565">#656565</option>
            
<option value="9a0000">#9a0000</option>
            
<option value="ce6301">#ce6301</option>
            
<option value="cd9934">#cd9934</option>
            
<option value="999903">#999903</option>
            
<option value="009901">#009901</option>
            
<option value="329a9d">#329a9d</option>
            
<option value="3531ff">#3531ff</option>
            
<option value="6200c9">#6200c9</option>
            
<option value="343434">#343434</option>
            
<option value="680100">#680100</option>
            
<option value="963400">#963400</option>
            
<option value="986536" selected="selected">#986536</option>
            
<option value="646809">#646809</option>
            
<option value="036400">#036400</option>
            
<option value="34696d">#34696d</option>
            
<option value="00009b">#00009b</option>
            
<option value="303498">#303498</option>
            
<option value="000000">#000000</option>
            
<option value="330001">#330001</option>
            
<option value="643403">#643403</option>
            
<option value="663234">#663234</option>
            
<option value="343300">#343300</option>
            
<option value="013300">#013300</option>
            
<option value="003532">#003532</option>
            
<option value="010066">#010066</option>
            
<option value="340096">#340096</option>
        
</select>
    </
label>
</
p>
</
div>

JS

jQuery('#jquery-colour-picker-example select').colourPicker({
    
ico:    WEBROOT 'aFramework/Modules/Base/gfx/jquery.colourPicker.gif'
    
title:    false
});

Source Code

jQuery.fn.colourPicker = function (conf) {
    
// Config for plug
    
var config jQuery.extend({
        
id:            'jquery-colour-picker',    // id of colour-picker container
        
ico:        'ico.gif',                // SRC to colour-picker icon
        
title:        'Pick a colour',        // Default dialogue title
        
inputBG:    true,                    // Whether to change the input's background to the selected colour's
        
speed:        500,                    // Speed of dialogue-animation
        
openTxt:    'Open colour picker'
    
}, conf);

    
// Inverts a hex-colour
    
var hexInvert = function (hex) {
        var 
hex.substr(02);
        var 
hex.substr(22);
        var 
hex.substr(42);

        return 
0.212671 0.715160 0.072169 0.5 'ffffff' '000000'
    
};

    
// Add the colour-picker dialogue if not added
    
var colourPicker jQuery('#' config.id);

    if (!
colourPicker.length) {
        
colourPicker jQuery('<div id="' config.id '"></div>').appendTo(document.body).hide();

        
// Remove the colour-picker if you click outside it (on body)
        
jQuery(document.body).click(function(event) {
            if (!(
jQuery(event.target).is('#' config.id) || jQuery(event.target).parents('#' config.id).length)) {
                
colourPicker.hide(config.speed);
            }
        });
    }

    
// For every select passed to the plug-in
    
return this.each(function () {
        
// Insert icon and input
        
var select    jQuery(this);
        var 
icon    jQuery('<a href="#"><img src="' config.ico '" alt="' config.openTxt '" /></a>').insertAfter(select);
        var 
input    jQuery('<input type="text" name="' select.attr('name') + '" value="' select.val() + '" size="6" />').insertAfter(select);
        var 
loc        '';

        
// Build a list of colours based on the colours in the select
        
jQuery('option'select).each(function () {
            var 
option    jQuery(this);
            var 
hex        option.val();
            var 
title    option.text();

            
loc += '<li><a href="#" title="' 
                    
title 
                    
'" rel="' 
                    
hex 
                    
'" style="background: #' 
                    
hex 
                    
'; colour: ' 
                    
hexInvert(hex
                    + 
';">' 
                    
title 
                    
'</a></li>';
        });

        
// Remove select
        
select.remove();

        
// If user wants to, change the input's BG to reflect the newly selected colour
        
if (config.inputBG) {
            
input.change(function () {
                
input.css({background'#' input.val(), color'#' hexInvert(input.val())});
            });

            
input.change();
        }

        
// When you click the icon
        
icon.click(function () {
            
// Show the colour-picker next to the icon and fill it with the colours in the select that used to be there
            
var iconPos    icon.offset();
            var 
heading    config.title '<h2>' config.title '</h2>' '';

            
colourPicker.html(heading '<ul>' loc '</ul>').css({
                
position'absolute'
                
lefticonPos.left 'px'
                
topiconPos.top 'px'
            
}).show(config.speed);

            
// When you click a colour in the colour-picker
            
jQuery('a'colourPicker).click(function () {
                
// The hex is stored in the link's rel-attribute
                
var hex jQuery(this).attr('rel');

                
input.val(hex);

                
// If user wants to, change the input's BG to reflect the newly selected colour
                
if (config.inputBG) {
                    
input.css({background'#' hexcolor'#' hexInvert(hex)});
                }

                
// Trigger change-event on input
                
input.change();

                
// Hide the colour-picker and return false
                
colourPicker.hide(config.speed);

                return 
false;
            });

            return 
false;
        });
    });
};

Download

Plug-in

Requires

Random jQuery Plug-ins

  • Content Scroller

    Use this plug-in to make a list of elements only show one at a time and every now and then scroll to the next one. The plug-in scrolls in infinty, sta...

    Details

  • Super Simple Tabs

    This is an extremely basic tabs-plugin which allows you to create tabbed content from the ever-so-common list of in-page-links. The plug-in takes one ...

    Details

  • Code Block Toolbar

    If you post code-examples on your site you can use this plug-in to add some nifty buttons below each code-example that allows the user to, for example...

    Details

More Plug-ins

Recent Comments

  1. AL on "Accessible, Stylish Modal Windows With Modern CSS"

    @Matt - What exactly isn't working? "Not working" ...

  2. roboteich on "Accessible, Stylish Modal Windows With Modern CSS"

    This is hardly accessible. Screen reader focus is...

  3. Matt on "Accessible, Stylish Modal Windows With Modern CSS"

    I have tried to implement this, but for some reaso...

Page cached. Loaded in: 0.007 second(s).
Last DB change: 2010-09-03 17:14:49
Last file change: 2010-08-12 15:31:16
Cache created: 2010-09-03 18:46:47