jsで反対色の生成
- <!DOCTYPE html>
- <html lang="ja">
- <head>
- <meta charset="UTF-8">
- <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
- <script type="text/javascript" src="knockout-2.1.0beta.js"></script>
- <title>jsで反対色の生成</title>
- </head>
- <body>
- <script type="text/javascript"><!--
- $(document).ready(function () {
- ko.applyBindings(new viewModel());
- });
- // =========================================================
- // カラーコードかチェックする
- // 戻り値は真・偽
- function checkColorCode(ColorCode)
- {
- // 「値がない」or「#で始まらないとき」は終了
- if (ColorCode == undefined || ColorCode.match(/^[#]/) == null)
- {
- return false;
- }
-
- // 「#を取って6文字」or「カラーコードが0~9、A~Fだけ」かチェック
- noMark = ColorCode.replace(/^[#]/, "");
- if (noMark.length != 6 || noMark.match(/^[0-9A-F]*$/i) == null)
- {
- return false;
- }
-
- return true;
- }
- // =========================================================
- // 16進数のカラーコードをRGBをキーにした配列に変換
- function ConvertToColorAryFrom16(ColorCode)
- {
- // #からはじまる色コードかチェック
- if (checkColorCode(ColorCode) == false)
- {
- return false;
- }
-
- // 1番目から3文字目までがR
- ConvertColor = new Array;
- ConvertColor["R"] = ColorCode.substring(1, 3);
- ConvertColor["G"] = ColorCode.substring(3, 5);
- ConvertColor["B"] = ColorCode.substring(5);
-
- return ConvertColor;
- }
- // 16進数のカラーコードを10進数にする
- // 戻り値はRGBをキーにした配列
- function ConvertColorCodeTo10From16(ColorCodeAry)
- {
- // 1番目から3文字目までがR
- ConvertColor = new Array;
- ConvertColor["R"] = parseInt(ColorCodeAry["R"], 16);
- ConvertColor["G"] = parseInt(ColorCodeAry["G"], 16);
- ConvertColor["B"] = parseInt(ColorCodeAry["B"], 16);
-
- return ConvertColor;
- }
- // 10進数のカラーコードを16進数にする
- // 戻り値はRGBをキーにした配列
- function ConvertColorCodeTo16From10(ColorCode)
- {
- // 1番目から3文字目までがR
- ConvertColor = new Array;
- ConvertColor["R"] = ColorCode["R"].toString(16);
- ConvertColor["G"] = ColorCode["G"].toString(16);
- ConvertColor["B"] = ColorCode["B"].toString(16);
-
- return ConvertColor;
- }
- // 10進数のカラーコードを格納した配列
- // 戻り値はRGBをキーにした配列
- function ConvertReverseColor(ColorArray)
- {
- ReverseColor = new Array;
- ReverseColor["R"] = Math.round(255 - ColorArray["R"]);
- ReverseColor["G"] = Math.round(255 - ColorArray["G"]);
- ReverseColor["B"] = Math.round(255 - ColorArray["B"]);
- return ReverseColor;
- }
- // 16進数のカラーコードを格納した配列を#xxxxxxにする
- // 戻り値は#xxxxxxといったカラーコード(文字列)
- function ConvertColorCode(ColorArray)
- {
- ColorCode = "#"
-
- // Rを追加
- if (ColorArray["R"].length == 1)
- {
- ColorCode += "0";
- }
- ColorCode += ColorArray["R"];
-
- // Gを追加
- if (ColorArray["G"].length == 1)
- {
- ColorCode += "0";
- }
- ColorCode += ColorArray["G"];
-
- // Bを追加
- if (ColorArray["B"].length == 1)
- {
- ColorCode += "0";
- }
- ColorCode += ColorArray["B"];
-
- return ColorCode;
- }
- /* ================================================
- ▼knockout.js
- ================================================ */
- function viewModel() {
- var self = this;
-
- self.inputColor = ko.observable();
-
- // 文字色
- self.outputColor = ko.computed( function()
- {
- if ( checkColorCode(self.inputColor()) == false )
- {
- return "";
- }
- return self.inputColor();
- }, this);
- // 背景色
- self.backColor = ko.computed( function()
- {
- if (self.outputColor() == false)
- {
- return "";
- }
-
- ColorAry16 = ConvertToColorAryFrom16( self.outputColor() );
- ColorAry10 = ConvertColorCodeTo10From16( ColorAry16 );
- ReverseAry10 = ConvertReverseColor( ColorAry10 );
- ReverseAry16 = ConvertColorCodeTo16From10( ReverseAry10 );
-
- return ConvertColorCode(ReverseAry16);
- }, this);
-
- }
- // --></script>
- <h1>jsで反対色の生成:表示部は「knockout.js」</h1>
- <h2>「#000000」ってな感じで#から始まる6ケタの色コードを入力</h2>
- <div>
- 色コード:<input type="text" data-bind="value: inputColor" /><br />
- <div style="margin-top:0.5em;padding:10px;" data-bind="visible: outputColor, style: {color: outputColor, backgroundColor: backColor}">
- 文字色:<span data-bind="text: outputColor"></span>、
- 背景色(反対色):<span data-bind="text: backColor"></span>
- </div>
- </div>
- <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
- <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
- <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
- </div>
- <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
- Copyright © 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
- </div>
- </body>
- </html>