В Snap.svg для работы с изображениями используется метод
image(), который позволяет вставлять растровые изображения
в SVG-документ. Основной синтаксис выглядит следующим образом:
var s = Snap("#svg");
var img = s.image("path/to/image.png", x, y, width, height);
"path/to/image.png" — путь к
изображению. Может быть как локальный путь, так и URL.x, y — координаты верхнего левого угла
изображения внутри SVG.width, height — размеры
изображения.После создания изображения его можно трансформировать, изменять
размеры и позицию с помощью стандартных методов Snap.svg, таких как
attr(), transform(),
animate().
img.attr({
x: 50,
y: 50,
width: 200,
height: 150
});
img.transform("r45"); // поворот на 45 градусов
С помощью метода attr() можно изменять отдельные
свойства изображения после его создания:
x, y — позиция
изображения.width, height —
размеры.opacity — прозрачность (от 0 до
1).visibility — видимость
(visible, hidden).img.attr({
opacity: 0.7,
visibility: "visible"
});
Snap.svg поддерживает сложные трансформации через метод
transform(). Можно комбинировать несколько действий:
t(dx, dy) — перенос.s(sx, sy, cx, cy) — масштабирование
относительно точки (cx, cy).r(angle, cx, cy) — вращение
относительно точки (cx, cy).skewX(angle),
skewY(angle) — наклон по оси X или Y.Пример комбинированной трансформации:
img.transform("t100,50r30,150,75s1.5,1.5,150,75");
Для плавного изменения свойств используется метод
animate(). Например, можно переместить изображение по
координатам и изменить его прозрачность:
img.animate({ x: 300, y: 200, opacity: 0.5 }, 1000, mina.easeinout);
mina
(mina.linear, mina.easein,
mina.easeout, mina.easeinout).Для динамического изменения размеров изображения в зависимости от контейнера можно использовать относительные единицы и привязку к размерам SVG. Snap.svg позволяет задать атрибуты в процентах:
img.attr({
width: "50%",
height: "50%"
});
Для поддержания пропорций при изменении размеров контейнера удобно
использовать метод getBBox(), чтобы получить исходные
размеры и позицию:
var bbox = img.getBBox();
img.attr({
width: bbox.width * 1.2,
height: bbox.height * 1.2
});
Изображения могут быть частью группы для совместной трансформации и
управления. Создается группа с помощью метода group():
var g = s.group(img);
g.transform("t50,50r15");
Все объекты внутри группы будут трансформироваться вместе, что облегчает создание сложных композиций.
Snap.svg позволяет использовать изображения в качестве масок или
клипов. Для этого применяются методы clip() и
mask():
var circle = s.circle(150, 150, 100);
img.clip(circle); // изображение обрезается по форме круга
var rect = s.rect(100, 100, 200, 200);
img.mask(rect); // изображение отображается только внутри прямоугольника
Клиппинг и маски дают возможность создавать сложные визуальные эффекты без изменения исходного изображения.
Помимо растровых изображений, Snap.svg поддерживает загрузку внешних
SVG-файлов через метод use(). Это позволяет вставлять в
документ готовые SVG-элементы:
Snap.load("icon.svg", function(fragment) {
s.append(fragment);
});
Использование use() обеспечивает повторное использование
одного и того же SVG без копирования кода, что удобно для иконок и
повторяющихся элементов интерфейса.
Изображения поддерживают стандартные события SVG:
img.click(function() {
this.attr({ opacity: 0.5 });
});
img.hover(
function() { this.attr({ opacity: 1 }); },
function() { this.attr({ opacity: 0.7 }); }
);
Можно подключать события мыши и касания, применять интерактивные эффекты и создавать динамические интерфейсы.
use(), чем вставлять дубликаты.Все эти методы позволяют создавать сложные и динамичные композиции с изображениями в Snap.svg, комбинируя трансформации, анимации, маски и клиппинг.