Javascript 用代码片段生成渐变,一个问题就解决了
我使用我自己的库来处理很多东西,最近我决定添加渐变功能,但我遇到了一个问题,我似乎记得不久前也遇到过这个问题,这就是我的渐变在接近尾声时稍微偏离的问题。首先,有关守则:Javascript 用代码片段生成渐变,一个问题就解决了,javascript,algorithm,gradient,Javascript,Algorithm,Gradient,我使用我自己的库来处理很多东西,最近我决定添加渐变功能,但我遇到了一个问题,我似乎记得不久前也遇到过这个问题,这就是我的渐变在接近尾声时稍微偏离的问题。首先,有关守则: 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(',')
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;
};
gradient=函数(l,g)
{
var r=[],s=[],f=g.length-1;
对于(变量x=0;x
当然,还有我的图书馆:
在那里玩得开心!:)如果您认为您可以提供任何帮助,我在渐变代码段中使用的自定义函数是_replace()、chunk()、map()、toBase()和fromBase()。。。正如您在上所看到的,一切都很正常(至少在Opera和Firefox中是如此),除了渐变在结尾处稍微偏离(悬停以显示十六进制值)。例如,调用gradient(50,['ffffffff','ffffff00','00ff00'])
确实创建了一个长度为50的数组,其中包含十六进制颜色值,从红色逐渐变为黄色,然后变为淡黄色,但是最后一种颜色并不完全是淡黄色(在本例中,它是05ff00);这意味着在数学上有点不对劲,而不是在方法论上
所以。。。有人愿意涉过丛林吗?这是我觉得非常美妙的代码,可以帮助我找到解决方案?非常感谢您的帮助。梯度=功能(l,g)
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][1]) / (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-1) / (g.length - 1)) * c)).toBase('hex').pad('0', 2);
});
return r;
};
{
var r=[],s=[],f=g.length-1;
对于(变量x=0;x顺便说一句,你的代码真的很难理解,试着编写更容易理解和标准化的代码。不要为循环而写[0,1,2]。映射(sth)。在FF 3.0.8中,演示页面链接对我不起作用。要澄清,正如apphacker所说,当我单击“生成”时,演示似乎没有做任何事情。你的代码是不可读的,请使用有意义的完整变量名,而不是仅仅用一个随机字母来命名;我将指向我的库的链接保留为用于我自己的服务器的链接。现在应该可以工作了……:)而且,Pim,它们不是完全随机的;图书馆是我个人使用的,所以我倾向于选择对我有意义的字母:[r]eturn,[s]teps,[g]radient,[f]ade count…是的,看看它给了你多少答案/