В Snap.svg градиенты применяются через атрибут fill для
элементов SVG. Существует два основных типа градиентов:
линейные и радиальные. Каждый из них
создаётся через метод gradient() объекта Snap и описывается
с помощью строки, задающей цвета и позиции перехода.
Пример линейного градиента:
var s = Snap("#svg");
var rect = s.rect(10, 10, 200, 100);
var grad = s.gradient("l(0, 0, 1, 0)#ff0000-#0000ff");
rect.attr({fill: grad});
l(0,0,1,0) — определяет линейный градиент от левого
края к правому.#ff0000-#0000ff — диапазон цветов, от красного к
синему.Для радиального градиентов используется префикс
r:
var circ = s.circle(150, 150, 80);
var radGrad = s.gradient("r(0.5,0.5,0.5)#ffff00-#ff00ff");
circ.attr({fill: radGrad});
r(0.5,0.5,0.5) — радиальный градиент с центром в
середине фигуры (0.5,0.5) и радиусом 0.5 от размера фигуры.Направление определяется координатами начала и конца градиента.
Snap.svg использует относительные координаты от 0 до
1, где (0,0) — левый верхний угол, а
(1,1) — правый нижний угол элемента.
Примеры направлений:
l(0,0,1,0)l(0,0,0,1)l(0,0,1,1)l(1,0,0,1)Для сложных эффектов можно комбинировать несколько цветов через дефис и процентные позиции:
var grad = s.gradient("l(0,0,1,0)#ff0000:0-#00ff00:50-#0000ff:100");
rect.attr({fill: grad});
#ff0000:0 — красный на 0% длины градиента#00ff00:50 — зелёный в середине#0000ff:100 — синий на концеРадиальные градиенты создаются с центром (cx, cy) и
радиусом r. Можно смещать центр для достижения различных
визуальных эффектов:
var grad = s.gradient("r(0.3,0.3,0.7)#ffffff-#000000");
rect.attr({fill: grad});
(0.3,0.3) смещён к левому верхнему
углу0.7 — почти весь элементМетод attr() позволяет применять градиенты не только к
заливке (fill), но и к обводке (stroke):
var circle = s.circle(100, 100, 50);
var strokeGrad = s.gradient("l(0,0,0,1)#ff00ff-#00ffff");
circle.attr({
fill: "#fff",
stroke: strokeGrad,
strokeWidth: 5
});
stroke принимает тот же объект градиента, что и
fillstrokeWidth определяет толщину линииSnap.svg позволяет изменять направление и масштаб градиента через
атрибут gradientTransform:
var grad = s.gradient("l(0,0,1,0)#ff0000-#0000ff");
grad.node.setAttribute("gradientTransform", "rotate(45)");
rect.attr({fill: grad});
rotate(angle) — поворот градиента на угол в
градусахtranslate, scale и
комбинированные трансформацииДля создания эффекта повторяющегося градиента используется
SVG-атрибут spreadMethod:
pad — стандартное растягивание (по умолчанию)reflect — зеркальное повторениеrepeat — непрерывное повторениеgrad.node.setAttribute("spreadMethod", "reflect");
Направление градиента можно изменять программно, создавая анимацию:
var grad = s.gradient("l(0,0,1,0)#ff0000-#0000ff");
rect.attr({fill: grad});
Snap.animate(0, 1, function(val){
grad.stop.x2 = val;
}, 2000);
Snap.animate(start, end, callback, duration) — плавная
анимацияgrad.stop управляет координатами градиента на летуУправление направлением градиента в Snap.svg сводится к корректной настройке координат начала и конца для линейного градиента или центра и радиуса для радиального. Добавление цветов, процентов, трансформаций и повторений позволяет создавать сложные, динамичные визуальные эффекты. Это делает библиотеку Snap.svg мощным инструментом для работы с векторной графикой в браузере.