0

現在、私はスクリプト形式の小さなスクリプトに取り組んでいます。このスクリプトは、ユーザーID(現在、フォーラムでは1から63のuserIDを使用しています)を受け取り、次の関数を使用してランダムな色で色付けします。

function setNickColor(nick) 
var spans = nick.getElementsByTagName('span');
var uid = nick.getAttribute('hovercard-id');

if (colors[uid] == null)
    storeColor(uid, Math.random().toString(15).substring(2,8));

これにより、スクリプトをインストールした人ごとに、24ビット(RGBカラーの場合)で個別に生成されたランダムな色が得られます。各IDに固定のランダムな色を生成させたいのですが。IDを関数に組み込んで、ランダムでありながらランダムな色を生成する方法がわかりません。

私はシードを見ましたが、私はjavascriptに非常に慣れていないため、シードが何をするのかを理解するのは少し難しいです

4

2 に答える 2

0

私が見ているように、ソリューションには2つの主要なコンポーネントがあります。

  1. ユーザーIDのランダムな色を生成します。
  2. 後続のリクエストで、このランダムな色をユーザーIDに関連付けます。

あなたはすでに最初のものをやったので、それは2番目のものを残します。バックエンドシステムが提供する柔軟性の種類に応じて、いくつかのオプションがあります。

  1. Webサービスを作成し、JavaScript関数から呼び出すことができます。呼び出しのペイロードは、ユーザーIDと生成された色であり、Webサービスはこれらをバックエンドデータベースに保存します。次に、テンプレートは、色が設定されていないかどうかを各ユーザーで確認し、ランダムな色を生成して設定します(そして、初期設定のためにページを更新します)。

  2. 生成した色を表すCookieをブラウザに設定し、このCookieを読み込んで、表示されているユーザーIDを変更することができます。これの欠点は、ブラウザに依存することです(同じマシンで、2つのブラウザで、同じユーザーIDに対して2つの異なる色を使用できます)。ユーザーがCookieをクリアすると、色が再生成されます。

  3. 3番目のオプションは、Olegが提案したものです。ユーザーIDのハッシュを作成し(一方向のアルゴリズムであるため、同じ入力で同じ結果が保証されます)、このハッシュのコンポーネントを色のベースとして使用します。利点は、CookieとWebサービスの問題を回避できることです。ただし、課題は、カラージェネレータをもう少し「ランダム」にする必要があることです。これは、視覚的にそれほど区別されない色になってしまう可能性があるためです。

于 2013-03-04T11:00:33.667 に答える
0

「固定」と「ランダム」は、まったく逆の2つです。ランダムを忘れてください。あなたの説明によると、あなたは本当に「修正」したいだけです。

解決策として、IDの任意のハッシュを取得し、それを3バイトに減らして、そのIDに対応するRGB値を作成します。

于 2013-03-04T10:53:11.503 に答える