2013-03-28 192 views
-5

我想要的是:RGB十六进制转换

  1. 从一个元素拿起RGB值
  2. 将它转换为十六进制
  3. 把它放进一个文本字段

第一种解决方案:

(取自该线程RGB to Hex and Hex to RGB

function rgbToHex(r, g, b) { 
    return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); 
} 

问题是:无论我喂它它只返回#aN。功能是否有缺陷或者我做错了什么?

See a demo here

第二溶液:

,从同样的柱如所提及的上部。

function componentToHex(c) { 
    var hex = c.toString(16); 
    return hex.length == 1 ? "0" + hex : hex; 
} 

function rgbToHex(r, g, b) { 
    return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); 
} 

这工作,如果我的价值传递给为数字rgbToHex(255,255,255)但什么都不做,如果我尝试作为一个变量rgbToHex(rgbValue)喂号码。 (见线19至25日在演示)

See the demo here

所有帮助表示赞赏:)

+6

那么,你将一个参数传递给一个三参数函数,并期望它的工作? – nneonneo

+0

谢谢:)我只是去删除这个愚蠢的问题。 –

回答

0

试试这个:

function componentToHex(c) { 
    var hex = c.toString(16); 
    return hex.length == 1 ? "0" + hex : hex; 
} 

function rgbToHex(r, g, b) { 
    return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); 
} 

//Slap the rel values into the fields 
$('.color').click(function(e) { 
    e.preventDefault(); 

    var rgbVal = $(this).attr('rel'); 

    var rgbValSplit = rgbVal.split(","); 

    for (var i = 0; i < 3; i++) { 
    if (!rgbValSplit[i]) { 
     rgbValSplit[i] = 0; 
    } 
    } 

    var finalHex = rgbToHex(+rgbValSplit[0], +rgbValSplit[1], +rgbValSplit[2]); 

    $('.color-picker-rgb').val(rgbVal); 
    $('.color-picker-hex').val(finalHex); 

    $('body').css('background', finalHex); 
}); 

http://codepen.io/anon/pen/eiqbz

的主要问题是,你需要传递3个参数。另一个问题是它期望的是数字,而不是字符串。所以当你通过它“191”,c.toString(16)将评估只是c。如果你通过它一个数字,如191,它会评估到适当的价值。