我使用自己的库来做很多东西,最近我决定添加渐变功能,但我遇到了一个我似乎记得不久前也遇到过的问题,这就是我的渐变稍微偏离了附近的问题结束。首先,有问题的代码:
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()...正如您将能够在此演示页面中看到的那样,一切都非常有效(至少在 Opera 和 Firefox 中)除了渐变在最后稍微偏离(悬停以显示十六进制值)。例如,调用gradient(50, ['ffffff', 'ffff00', '00ff00'])
确实创建了一个长度为 50 的数组,其中包含逐渐从红色变为黄色然后变为石灰的十六进制颜色值,但是最后一种颜色并不完全是石灰(在这种情况下,它是 05ff00);这意味着在数学而不是方法论中有些许偏差。
所以...有人愿意在丛林中跋涉,我觉得代码非常漂亮,可以帮助我找到解决方案吗?非常感谢所有帮助。