2013-04-06 139 views
1

我做了一個十六進制到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"> 

Here's the JSFiddle.

我也想知道爲什麼,如果我是用false更換broken,我得到一個錯誤。你知道爲什麼我不能刪除var broken = false,只需要替換爲false

+3

備註:您的邏輯是目前錯誤的。 '#abc'不是'#abcabc',而是'#aabbcc'。 – Zeta 2013-04-06 11:43:21

+0

哦,是嗎?我該如何解決這個問題?對不起,我是JavaScript新手。 – user2203362 2013-04-06 11:44:55

+2

請參閱http://stackoverflow.com/q/5623838/989121 – georg 2013-04-06 11:45:10

回答

0

這裏是將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(''); 
    } 
    }); 
}); 

的這裏工作示例http://jsbin.com/amisen/3/edit

+0

它完美的作品,謝謝!你知道我的HEX到RGB有什麼問題嗎?顯然這個邏輯是錯誤的。 – user2203362 2013-04-06 13:26:13

+0

@ 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

+0

啊,我明白了。很酷,謝謝! – user2203362 2013-04-06 13:37:26