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

  • Pixastic Editor

    This app/plug-in inserts a (completely stylable) toolbar next to any image in your document that allows the user to apply different Pixastic-effects ...

    Details

  • Max Length Form Controls

    Gives form-controls with a 'maxlength-XXX'-class a max-length and prohibits user from entering more than set amount. It also displays number of charac...

    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. You can set the select...

    Details

More Plug-ins

Recent Comments

  1. Andreas on "SleekPHP User Handling"

    Thank you for showing interest :) Were the docs en...

  2. ciptard on "SleekPHP User Handling"

    Ok, thank you

  3. Andreas on "SleekPHP User Handling"

    I might write a "getting started" article for Slee...

Page cached. Loaded in: 0.0122 second(s).
Last DB change: 2012-02-04 08:04:40
Last file change: 2011-10-03 07:42:35
Cache created: 2012-02-05 08:56:16