2016-09-13 4 views
0

ボタンのボックスシャドウを動的に背景色にするコードがいくつか作成されましたが、動作しない4桁の16進コードが返されることがあります。 コードで何が間違っているか教えてもらえますか?jquery色を暗くするコードが4桁の16進コードを返す

それはあなたの例

function rgb2hex(rgb){ 
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 
return "#" + ("0" + parseInt(rgb[1],10).toString(16)).slice(-2) + ("0" + parseInt(rgb[2],10).toString(16)).slice(-2) + ("0" + parseInt(rgb[3],10).toString(16)).slice(-2);} 

function LightenDarkenColor(col, amt) { 
var usePound = false; 
if (col[0] == "#") { 
    col = col.slice(1); 
    usePound = true; 
} 
var num = parseInt(col,16); 
var r = (num >> 16) + amt; 
if (r > 255) r = 255; 
else if (r < 0) r = 0; 
var b = ((num >> 8) & 0x00FF) + amt; 
if (b > 255) b = 255; 
else if (b < 0) b = 0; 
var g = (num & 0x0000FF) + amt; 
if (g > 255) g = 255; 
else if (g < 0) g = 0; 
return (usePound?"#":"") + (g | (b << 8) | (r << 16)).toString(16);} 

$("input[type=submit]").each(function() { 
//get button color 
var btnclr = $(this).css("background-color"); 
//make darker 
$(this).css({"box-shadow": "0 -3px 20px " + LightenDarkenColor(rgb2hex(btnclr), -80) + " inset"}); 
}); 
+0

'0を返す<< 8'が '0'になるが、あなたは色ごとに2桁の数字が必要です(つまり '00')、左パディング機能をお勧めします – Shameen

+0

@Shameenどういう意味ですか? –

答えて

0

例えば#1 0fe93bで発生し、両方の赤と青は、それが色ごとに2つの数字に「パディング」することなく、0なるためのみ4桁を返します。 (期待値:"#009900"、実際:"#9900"

また、色が間違っていると思われる赤、緑、青の色があります。ここで

は(パッドゼロに余分な機能を備えた)更新LightenDarkenColor機能である:あなたがLightenDarkenColor("#0fe93b",-80)を実行したときに

function padZero(str, n) { 
    str = str.toString() 
    while (str.length < n) { 
     str = "0" + str; 
    } 
    return str; 
} 

function LightenDarkenColor(col, amt) { 
    var usePound = false; 
    if (col[0] == "#") { 
     col = col.slice(1); 
     usePound = true; 
    } 
    var num = parseInt(col,16); 

    var r = (num >> 16) + amt; 
    if (r > 255) r = 255; else if (r < 0) r = 0; 

    var g = ((num >> 8) & 0x00FF) + amt; 
    if (g > 255) g = 255; else if (g < 0) g = 0; 

    var b = (num & 0x0000FF) + amt; 
    if (b > 255) b = 255; else if (b < 0) b = 0; 

    return (usePound?"#":"") + padZero(r.toString(16), 2) + padZero(g.toString(16), 2) + padZero(b.toString(16), 2); 
} 

今では"#009900"

+0

完璧!ありがとうございました! –

関連する問題