1
文字の配列のngRepeat
で角度のあるテキストに色を動的に割り当てようとしています。ngRepeatの角を使って要素の色を動的に変更します。
私はこれを行うのに「角度のある道」を考え出すことに問題があります。私はいつも、適切なHSLカラースキームを要素のスタイルに適用するフィルタを設定できますが、ダイジェストサイクルごとに色を再計算する必要があるため、非常に非効率です。 ngRepeat
アレイは、数千アイテムになる可能性があります。それは、関連するなら
は、ここにテキストである - > HSL変換コード:
function calculateColor(value){
var saturation = [0.35, 0.5, 0.65];
var lightness = [0.25, 0.35, 0.45];
var hash = stringToHash(value);
var hsl = calculateHsl(hash, lightness, saturation);
return hsl;
}
function stringToHash(value){
var seed = 131;
var seed2 = 137;
var hash = 0;
value += 'x';
var MAX_SAFE_INT = 9007199254740991/seed2;
var charArray = value.split('');
for(var i = 0; i < charArray.length; i++){
if(hash >= MAX_SAFE_INT){
hash == hash/seed2;
}
hash = hash * seed + charArray[i].charCodeAt(0);
}
return Math.abs(hash);
}
function calculateHsl(hash, lightness, saturation){
var H,S,L;
H = hash % 359;
hash = hash/360;
S = saturation[hash % saturation.length];
hash = hash/saturation.length;
L = lightness[hash % lightness.length];
return [H,S,L];
}
フィルタ:あなたはあなたが計画していただけのようなフィルタを使用することができますが、保存することができます
chatApp.filter('toHsl', function(){
return function(input){
var hsl = calculateHslColor(input);
var hslString = 'hsl('+hsl[0]+', '+hsl[1]*100+'%, '+hsl[2]*100+'%)'
return hslString;
}
});
詳細を教えてください。一度バインドするとパフォーマンスの問題が解決するか、ページの読み込み後にリピートアレイを更新すると思いますか? – Dan
リピートを実行している新しいリストにロードするたびに更新する必要がありますか?あなたの制約などは何ですか? – ajmajmajma
@ダン返事をありがとう。 1つの時間バインディングが実際に機能しますが、テキストは配列の後に変更されません。 Ajmaj要素ごとに1回だけ設定する必要があります –