SVG.js предоставляет мощные инструменты для создания и управления паттернами и текстурами внутри SVG-графики. Паттерн — это повторяющийся элемент, который можно использовать для заполнения фигур или линий. Текстуры часто строятся на основе паттернов и позволяют создавать визуально насыщенные графические элементы.
Для начала работы используется метод pattern(), который
создаёт новый элемент <pattern> внутри
SVG-контейнера:
const draw = SVG().addTo('body').size(400, 400);
const myPattern = draw.pattern(20, 20, function(add) {
add.rect(10, 10).fill('#ff0000');
add.rect(10, 10).move(10, 10).fill('#00ff00');
});
Параметры метода
pattern(width, height, callback):
width, height — размеры повторяющегося
блока.callback — функция, принимающая объект
add, который используется для добавления элементов внутрь
паттерна.Внутри паттерна можно использовать любые фигуры:
rect, circle, line,
path и т. д.
Паттерн автоматически повторяется на всей площади фигуры, к которой он применяется.
После создания паттерна его можно использовать как fill
для любой фигуры:
const rect = draw.rect(200, 200).fill(myPattern);
Также паттерн можно применять к circle,
ellipse, polygon и другим SVG-элементам:
const circle = draw.circle(150).fill(myPattern);
Это позволяет создавать сложные декоративные заливки без использования растровых изображений.
SVG.js поддерживает трансформации паттернов, включая сдвиг,
масштабирование и вращение. Для этого используется метод
transform():
myPattern.transform({
scaleX: 2,
scaleY: 2,
rotate: 45,
translateX: 10,
translateY: 5
});
scaleX, scaleY —
масштабирование по осям X и Y.rotate — вращение паттерна в
градусах.translateX, translateY —
сдвиг паттерна внутри фигуры.Трансформация позволяет создавать динамичные и необычные текстурные эффекты.
В качестве паттерна можно использовать не только примитивные фигуры,
но и изображения. Для этого применяется метод image():
const imgPattern = draw.pattern(100, 100, function(add) {
add.image('texture.png', 100, 100);
});
const square = draw.rect(300, 300).fill(imgPattern);
image(src, width, height) вставляет растровое
изображение в паттерн.Такая техника полезна для создания текстур с фотографическими деталями или логотипами.
Паттерны можно комбинировать, накладывая их друг на друга с использованием групп:
const combinedPattern = draw.pattern(50, 50, function(add) {
add.rect(25, 25).fill('#0000ff');
add.circle(20).move(15, 15).fill('#ffff00');
});
draw.rect(200, 200).fill(combinedPattern);
group()) для
объединения элементов.SVG.js поддерживает анимацию паттернов через метод
animate(). Например, можно создать движущуюся текстуру:
myPattern.animate(2000, '<>').transform({ translateX: 50 }).loop();
2000 — длительность анимации в
миллисекундах.'<>' — тип кривой анимации (ease
in-out).loop() повторяет анимацию бесконечно.Такое решение позволяет создавать эффекты бегущей текстуры, мерцающего паттерна или динамического фона.
<pattern>, что
увеличивает нагрузку на память при больших изображениях.fillPattern с линейным или радиальным градиентом..clear() и добавление новых элементов в любой момент
времени.click, mouseover,
mousemove).Эта система паттернов и текстур делает SVG.js мощным инструментом для создания визуально богатых и интерактивных графических элементов на веб-страницах. Она сочетает простоту создания, гибкость трансформаций и возможность динамических изменений, обеспечивая полный контроль над внешним видом SVG-объектов.