在 Spectrum JS Colorpicker Palette 中更新新颜色
Update new color in Spectrum JS Colorpicker Palette
我正在使用 spectrum jQuery 颜色选择器并更改背景颜色,但工作正常,但只有一个问题。刷新页面后,选择器按钮的颜色变为黑色而不是选定的颜色(例如,红色)
页面的背景颜色改变没有任何问题,除此之外一切正常。看看这个(点击看图片):
Selected Color -> after refreshing the page
这是我的代码:
HTML:
<input id="colorpicker" style="display: none;">
JS:
var currColor = $.cookie('body_color') || 'rgba(0, 0, 0, 0.5)';
$('body').css('background-color', currColor);
$("#colorpicker").spectrum({
preferredFormat: 'rgb',
showInput: true,
showAlpha: true,
color: currColor.substring(1),
move: function(color) {
$('body').css('background-color', color.toRgbString());
$.cookie('body_color', color.toRgbString(), {
expires: 365
});
}
});
我该如何解决这个问题?
如果我将 color.toRgbString()
更改为color.toHexString()
,这个问题会得到解决,但会出现另一个问题(之后我无法将 rgba 颜色用于页面背景和透明度不工作):
var currColor = $.cookie('body_color') || 'rgba(0, 0, 0, 0.5)';
$('body').css('background-color', currColor);
$("#colorpicker").spectrum({
preferredFormat: 'rgb',
showInput: true,
showAlpha: true,
color: currColor.substring(1),
move: function(color) {
$('body').css('background-color', color.toHexString());
$.cookie('body_color', color.toHexString(), {
expires: 365
});
}
});
我有个主意,但你应该编辑 spectrum.js 文件。
此函数 function inputToRGB(color)
强制颜色选择器按钮的 rgba 颜色设置为 rgb(0, 0, 0)(当您选择 rgba 颜色时,刷新页面后,颜色选择器按钮的颜色强制设置为该颜色,但有十六进制没问题)。
解决这个问题:
在spectrum.js中找到这段代码:
function inputToRGB(color) {
var rgb = { r: 0, g: 0, b: 0 };
var a = 1;
然后把上面的代码改成:
function inputToRGB(color) {
var colorString = color.toString(),
colorsOnly = colorString.substring(colorString.indexOf('(') + 1, colorString.lastIndexOf(')')).split(/,\s*/),
red = colorsOnly[0],
green = colorsOnly[1],
blue = colorsOnly[2],
opacity = colorsOnly[3];
var rgb = { r: red, g: green, b: blue };
var a = opacity;
使用上面的正则表达式从浏览器cookie中获取颜色值,然后提取4段rgba颜色代码的颜色值,然后在'rgb'和'a'变量中使用它们!
您可以同时使用 color.toString()
或 color.toRgbString()
。
我正在使用 spectrum jQuery 颜色选择器并更改背景颜色,但工作正常,但只有一个问题。刷新页面后,选择器按钮的颜色变为黑色而不是选定的颜色(例如,红色) 页面的背景颜色改变没有任何问题,除此之外一切正常。看看这个(点击看图片):
Selected Color -> after refreshing the page
这是我的代码:
HTML:
<input id="colorpicker" style="display: none;">
JS:
var currColor = $.cookie('body_color') || 'rgba(0, 0, 0, 0.5)';
$('body').css('background-color', currColor);
$("#colorpicker").spectrum({
preferredFormat: 'rgb',
showInput: true,
showAlpha: true,
color: currColor.substring(1),
move: function(color) {
$('body').css('background-color', color.toRgbString());
$.cookie('body_color', color.toRgbString(), {
expires: 365
});
}
});
我该如何解决这个问题?
如果我将 color.toRgbString()
更改为color.toHexString()
,这个问题会得到解决,但会出现另一个问题(之后我无法将 rgba 颜色用于页面背景和透明度不工作):
var currColor = $.cookie('body_color') || 'rgba(0, 0, 0, 0.5)';
$('body').css('background-color', currColor);
$("#colorpicker").spectrum({
preferredFormat: 'rgb',
showInput: true,
showAlpha: true,
color: currColor.substring(1),
move: function(color) {
$('body').css('background-color', color.toHexString());
$.cookie('body_color', color.toHexString(), {
expires: 365
});
}
});
我有个主意,但你应该编辑 spectrum.js 文件。
此函数 function inputToRGB(color)
强制颜色选择器按钮的 rgba 颜色设置为 rgb(0, 0, 0)(当您选择 rgba 颜色时,刷新页面后,颜色选择器按钮的颜色强制设置为该颜色,但有十六进制没问题)。
解决这个问题:
在spectrum.js中找到这段代码:
function inputToRGB(color) {
var rgb = { r: 0, g: 0, b: 0 };
var a = 1;
然后把上面的代码改成:
function inputToRGB(color) {
var colorString = color.toString(),
colorsOnly = colorString.substring(colorString.indexOf('(') + 1, colorString.lastIndexOf(')')).split(/,\s*/),
red = colorsOnly[0],
green = colorsOnly[1],
blue = colorsOnly[2],
opacity = colorsOnly[3];
var rgb = { r: red, g: green, b: blue };
var a = opacity;
使用上面的正则表达式从浏览器cookie中获取颜色值,然后提取4段rgba颜色代码的颜色值,然后在'rgb'和'a'变量中使用它们!
您可以同时使用 color.toString()
或 color.toRgbString()
。