Я использую свою собственную библиотеку для многих вещей, и недавно я решил добавить функциональность градиента, но я столкнулся с проблемой, которую, как мне кажется, я помню, тоже недавно, и это вопрос моего градиента немного не ближе к концу. Во-первых, рассматриваемый код:
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'])
действительно создает массив длиной пятьдесят, который содержит шестнадцатеричные значения цвета, постепенно смещаясь от красного к желтому, а затем к известковому, однако последний цвет не совсем известь (в данном случае это 05ff00) ; это означает, что в математике есть что-то не так, а не в методологии.
Итак ... кто-нибудь желает пройтись по джунглям, это код, который я нахожу настолько странно красивым, чтобы помочь мне найти решение? Мы очень ценим любую помощь.