私は多くのもののために自分のライブラリを使用していますが、最近はグラデーション機能を追加することにしましたが、また、これは私のグラデーションが終わり近くにやや離れているということです。まず、問題のコード:スニペットを使ってグラデーションを生成するためのスニペットによる奇妙な問題
gradient = function(l, g)
{
var r = [], s = [], f = g.length - 1;
for (var x = 0; x < g.length; x++)
g[x] = (typeof(g[x]) == 'string' ? g[x] : g[x].join(','))._replace(['#', ' ', 'rgb(', ')'], ''),
g[x] = (g[x].indexOf(',') != -1
? g[x].split(',')
: g[x].chunk(2).map(function(_)
{
return _.fromBase('hex');
}));
for (var x = 0; x < f; x++)
s[x] = [(g[x][0] - g[x + 1][0])/(l - 1) * f, (g[x][1] - g[x + 1][2])/(l - 1) * f, (g[x][2] - g[x + 1][2])/(l - 1) * f];
for (var x = 0; x < l; x++)
r[x] = '', ([0, 1, 2]).map(function(_)
{
var c = Math.floor(x/(l/(g.length - 1)));
r[x] += (g[c][_] - s[c][_] * (x - (l/(g.length - 1)) * c)).toBase('hex').pad('0', 2);
});
return r;
};
そして、もちろん、私の図書館:http://wimg.co.uk/HJ0X8B.js
はそこで楽しんでください!私がグラデーションスニペットで使用するカスタム関数は、_replace()、chunk()、map()、toBase()およびfromBase()です。 this demo pageで見ることができるように、すべての機能はほとんど(OperaとFirefoxでは少なくとも)動作しています。たとえば、gradient(50, ['ffffff', 'ffff00', '00ff00'])
を呼び出すと、長さ50の配列が実際に作成されます。この配列には、赤から黄、そして石灰に徐々に移行する16進数のカラー値が含まれますが、最後の色は正確にはライムではありません(この場合は05ff00です)。これは、数学に多少の違いがあり、方法論ではないことを意味します。
だから、誰かが私が解決策に達するのを助けるために、それほど奇妙に美しいと感じるコードであるジャングルを歩きたいのですか?すべての援助は非常に高く評価されます。
FF 3.0.8 –
でデモページのリンクが機能しませんでした。「生成」をクリックしたときにデモが表示されませんでした。 –
apphackerによると、あなたのコードは読めないので、ランダムな名前を付けるのではなく、意味のある変数名を使用してください。 –