Snap.svg — это JavaScript-библиотека для работы с векторной графикой в формате SVG (Scalable Vector Graphics) в браузере. Она предоставляет удобный API для создания, модификации и анимации SVG-элементов, значительно упрощая взаимодействие с нативным SVG DOM.
Библиотека ориентирована на разработчиков, которым требуется точный контроль над графикой, а также возможность создавать интерактивные и анимированные интерфейсы без использования растровых изображений.
SVG — это XML-формат, предназначенный для описания двухмерной векторной графики. В отличие от растровых изображений (PNG, JPEG), SVG:
Однако работа напрямую с SVG через стандартный DOM API часто оказывается громоздкой и неудобной. Snap.svg решает эту проблему, предоставляя лаконичный и выразительный интерфейс.
Snap.svg позволяет создавать базовые графические примитивы:
rect)circle)ellipse)line)path)text)Пример:
var s = Snap(500, 500);
var circle = s.circle(100, 100, 50);
circle.attr({
fill: "#3498db",
stroke: "#2c3e50",
strokeWidth: 5
});
Метод attr() используется для чтения и изменения свойств
SVG-элементов:
circle.attr("fill"); // получение значения
circle.attr({ fill: "#e74c3c" }); // установка значения
Поддерживаются все стандартные SVG-атрибуты:
fillstrokeopacitytransformЭлементы можно объединять в группы:
var group = s.group(circle, rect);
Это позволяет:
SVG-пути — один из самых мощных инструментов векторной графики. Snap.svg предоставляет удобные методы для их создания и анализа:
var path = s.path("M10 10 L90 90");
Также доступны функции:
Snap.svg поддерживает все основные трансформации:
translate)scale)rotate)skew)Пример:
circle.transform("translate(50, 50) rotate(45)");
Трансформации можно комбинировать и применять динамически.
Одна из ключевых особенностей Snap.svg — встроенная система анимации:
circle.animate({ cx: 200 }, 1000);
Параметры:
Пример с easing:
circle.animate(
{ cx: 300 },
1000,
mina.easeinout
);
Snap.svg поддерживает обработку событий:
circle.click(function() {
this.attr({ fill: "#2ecc71" });
});
Доступны стандартные события:
clickmouseovermouseoutmousemoveБиблиотека позволяет загружать и использовать внешние SVG-файлы:
Snap.load("image.svg", function(fragment) {
s.append(fragment);
});
Это удобно для:
Главная точка входа:
var s = Snap("#svg");
Или создание нового SVG:
var s = Snap(800, 600);
Объект Snap представляет контейнер SVG и предоставляет
методы для работы с ним.
Snap.svg оборачивает нативные DOM-элементы в собственные объекты, предоставляя дополнительные методы:
.attr().animate().transform().remove()Это делает код более читаемым и компактным.
Выбор элементов осуществляется аналогично CSS:
var element = Snap.select("#myElement");
var elements = Snap.selectAll(".items");
Через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js"></script>
После подключения глобально доступен объект Snap.
<svg id="canvas" width="400" height="400"></svg>
<script>
var s = Snap("#canvas");
var rect = s.rect(50, 50, 100, 100);
rect.attr({
fill: "#f39c12"
});
rect.animate({ x: 200 }, 1000);
</script>
Snap.svg активно использует:
mina).Библиотека позволяет добавлять пользовательские методы:
Snap.plugin(function(Snap, Element, Paper, global) {
Element.prototype.highlight = function() {
this.attr({ stroke: "red", strokeWidth: 3 });
};
});
Snap.svg остается полезным инструментом для задач, где требуется:
Особенно актуальна в образовательных целях и проектах средней сложности, где не требуется высокая производительность или сложная визуализация данных.