RGB到十六进制转换JavaScript
我做了一个十六进制到RGB转换的JSFiddle,但我想知道怎样才能做到另一种方式(RGB到十六进制)。RGB到十六进制转换JavaScript
$('#hex').bind('blur keydown', function (event) {
setTimeout(function() {
var rgb = [],
broken = false,
value = $("#hex").val(),
hex = (value+'').replace(/#/, '');
if (value.length === 1 && value !== '#') {
$("#hex").val(value);
}
if (hex.length == 3) hex = hex + hex;
for (var i = 0; i < 6; i+=2) {
rgb.push(parseInt(hex.substr(i,2),16));
broken = broken || rgb[rgb.length - 1].toString() === 'NaN';
}
$('#rgb').val(broken ? '' : 'rgb(' + rgb.join(',') + ')');
}, 13);
});
'#hex'
和'#rgb'
只是输入:
<input type="text" id="hex" placeholder="hex">
<input type="text" id="rgb" placeholder="rgb">
我也想知道为什么,如果我是用false
更换broken
,我得到一个错误。你知道为什么我不能删除var broken = false
,只需要替换为false
?
这里是将RGB转换为十六进制代码:
$(function(){
var $hex = $('#hex');
$('#rgb').on('keyup blur', function() {
var value = this.value,
rgb,
hex = '',
component,
i;
try {
if(value && value.indexOf('rgb(') === 0 && value[value.length-1] === ')') {
rgb = value.slice(4,-1).split(',');
if(rgb.length === 3) {
for(i=0;i<3;i++) {
if(rgb[i] <= 0xFF) {
component = parseInt(rgb[i],10);
if(isNaN(component)) {
throw new SyntaxError();
}
component = component.toString(16);
if(component.length === 1) {
component = '0'+component;
}
hex += component;
} else {
throw new RangeError();
}
}
$hex.val('#'+hex);
} else {
throw new SyntaxError();
}
}
} catch(e) {
$hex.val('');
}
});
});
它完美的作品,谢谢!你知道我的HEX到RGB有什么问题吗?显然这个逻辑是错误的。 – user2203362 2013-04-06 13:26:13
@ user2203362 if(hex.length == 3)hex = hex + hex;'if'(hex.length === 3)hex = hex [0] + hex [0] + hex [1 ] +十六进制[1] +十六进制[2] +十六进制[2];' – Vadim 2013-04-06 13:32:20
啊,我明白了。很酷,谢谢! – user2203362 2013-04-06 13:37:26
备注:您的逻辑是目前错误的。 '#abc'不是'#abcabc',而是'#aabbcc'。 – Zeta 2013-04-06 11:43:21
哦,是吗?我该如何解决这个问题?对不起,我是JavaScript新手。 – user2203362 2013-04-06 11:44:55
请参阅http://*.com/q/5623838/989121 – georg 2013-04-06 11:45:10