2017-09-16 12 views
3

StackOverflowトピックの1つに従って、独自のRGB to HEXカラーコンバータを作成しようとしました。RGBをHEXに変換する

理由は分かりませんが、代わりにRGB値を2倍に変換します。

入力がrgb(0, 128, 192)の場合、それは#00128192をコンソールアウトします。

私のコードは次のとおり

fromRGB: { 
    toHEX: { 
     supportFunc: function(number) { 
      var hex = number.toString(16); 
      return hex.length == 1 ? '0' + hex : hex; 
     }, 
     convert: function(r, g, b) { 
      var lol = '#' + this.supportFunc(r) + this.supportFunc(g) + this.supportFunc(b); 
      console.log(lol); 
     } 
    }, 
    prepareAndExecute: function(color_field) { 
     // preparing 
     var numbers = color_field.match(/\d+/g); 
     if(numbers.length == 3) { 
      this.toHEX.convert(numbers[0], numbers[1], numbers[2]); 
     } else { 
      alert('wrong RGB number format'); 
     } 


     //this.toHSL(preparedValue); 
    } 
} 

I関数を準備実行、lol変数は、HEX形式で変換された色が含まれていなければならないものです。

私のコードで何が問題なのですが、なぜ機能しないのですか?

+1

'.match ) 'は数字ではなく**文字列**の配列を返します。 – Pointy

+0

[RGB to Hex and Hex to RGB]の重複している可能性があります(https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb) –

+0

@KenWhite私はOPがすでに複写上のコードを思いつくためにリンクを張ってください。しかし、値を取得する方法に関係しない問題(文字列としての文字列)が発生しました。したがって、それをそのリンクに複製としてマークするのは間違っています。 –

答えて

1

説明:

あなたはsupportFuncに、文字列ではない数字を渡しているからです。

prepareAndExecutematchの結果は、あなたがあるとして、文字列を返します(ないNumber.prototype.toStringString.prototype.toStringを呼び出している、supportFunctoStringを呼び出すようにすると、文字列の配列です。

ソリューション:

var hex = Number(number).toString(16);      // using Number to convert a string to a number (you can use parseInt or unary + if you like) 

のかconvertに渡す前にそれらを変換:supportFunc

toStringを使用する前に、数にnumberを変換する(

this.toHEX.convert(+numbers[0], +numbers[1], +numbers[2]); // using unary + 
関連する問題