編輯:發佈解決方案Farbtastic HSL轉換回RGB或十六進制
我想創建一個基於Farbtastic選擇的顏色色板。我對HSL值做了我的計算,因爲它更容易,併產生更好的結果。
正從Farbtastic的HSL值之後,我加入亮度創建新的顏色。新顏色採用HSL格式,我需要將它切換回RGB或十六進制,以便顯示並保存以備後用。有些瀏覽器顯示HSL,但我不相信所有的移動瀏覽器都會這樣做。
的問題是轉換變量「newcolor」回RGB或十六進制,一旦計算已完成。
// collect parent ids for farb
$(".farbtastic").parent().each(writeColorpanel);
function writeColorpanel (i, elem) {
var picker = $.farbtastic(elem); //farb object
picker.linkTo(onColorChange); //a farb function
}
function onColorChange(color) {
// retrieve hsl value, do calculations and place in hidden input.
var hslcolor = $.farbtastic('#example_colorpicker_picker').hsl;
// brighten by 40%
var brightness = 1.4 * (Math.round(hslcolor[2]*10000)/10000);
if (brightness>1) { brightness = 1 };
if (brightness<0) { brightness = 0; }
// create the new brighter color
var newcolor = hslcolor;
newcolor[2]=brightness;
//convert to rgb (safer than trusting all mobile browsers to display HSL)
var rgb = hsl2rgb(newcolor);
//apply the color to swatches
var firstSwatch = $('#section-example_colorpicker').find('.square1');
firstSwatch.css({'background-color': color });
var secondSwatch = $('#section-example_colorpicker').find('.square2');
secondSwatch.css('background-color', 'rgb('+rgb.r+','+rgb.g+','+rgb.b+')');
}
function hsl2rgb(hsl) {
var h = hsl[0], s = hsl[1], l = hsl[2];
var m1, m2, hue;
var r, g, b
h = (Math.round(360*h)/1);
if (s == 0)
r = g = b = (l * 255);
else {
if (l <= 0.5)
m2 = l * (s + 1);
else
m2 = l + s - l * s;
m1 = l * 2 - m2;
hue = h/360;
r = Math.round(HueToRgb(m1, m2, hue + 1/3));
g = Math.round(HueToRgb(m1, m2, hue));
b = Math.round(HueToRgb(m1, m2, hue - 1/3));
}
return {r: r, g: g, b: b};
}
function HueToRgb(m1, m2, hue) {
var v;
if (hue < 0)
hue += 1;
else if (hue > 1)
hue -= 1;
if (6 * hue < 1)
v = m1 + (m2 - m1) * hue * 6;
else if (2 * hue < 1)
v = m2;
else if (3 * hue < 2)
v = m1 + (m2 - m1) * (2/3 - hue) * 6;
else
v = m1;
return 255 * v;
}
請注意標記爲答案的腳本適用於整數值。由於Farb返回了小數值,所以我做了小小的修改,上面貼出來。
WordPress主題作者: 如果您正在使用Options Framework Theme WordPress的,並希望使用Farbtastic所以您可以使用HSL值,請參閱本Fork by Elihorn,其中包含你需要的文件。在這組文件中,我需要添加「wp_enqueue_style('farbtastic');」在我們排隊劇本的路線上。 farbtastic的.JS文件不需要包含,因爲WP已經擁有它。當然,你也需要排隊Jquery,可能是在functions.php的頂部。
對於這個問題(有重複的問題)的第2部分,請參閱: Return different values from function used multiple times
謝謝Adeneo,我會試試這個!這件事可能是一個字符串。迄今爲止的兩天,eep。 – 2012-08-03 23:30:37
它可以使用如下數字: var h = 0.09888999543019379, s = 0.8260000610351563, l = 0.8119999999999999?要改變色調是否正確? – 2012-08-04 00:12:16
它應該與這些值一起工作,但是這會給你一些非常接近黑色的東西,我認爲? – adeneo 2012-08-04 00:32:15