Clipping paths

Snap.svg предоставляет мощные средства для работы с векторной графикой на основе SVG. Одной из таких возможностей является использование clipping paths — инструмент, позволяющий ограничивать видимую область элементов SVG по форме другого объекта. Это позволяет создавать сложные маски, нестандартные обрезки и визуальные эффекты без изменения исходной геометрии элементов.


Создание и применение clipping path

Clipping path в Snap.svg создается с помощью элемента <clipPath> в SVG. В Snap.svg он представляется как обычный объект Paper или Element, который затем привязывается к другому элементу с помощью метода .attr({ 'clip-path': ... }).

Пример создания clipping path:

var s = Snap(400, 400);

// Создание элемента, который будет обрезающим
var circleClip = s.circle(200, 200, 100);

// Создание прямоугольника, который будем обрезать
var rect = s.rect(50, 50, 300, 300).attr({
    fill: '#3498db'
});

// Создание clipPath и добавление обрезающего элемента
var clip = s.clip().add(circleClip);

// Применение clipping path к прямоугольнику
rect.attr({
    'clip-path': clip
});

Ключевые моменты:

  • Объект, используемый как clipPath, может быть любой фигурой SVG: circle, rect, path, ellipse, polygon.
  • Элемент внутри <clipPath> определяет границы видимой области. Всё за пределами этой фигуры будет скрыто.

Использование сложных форм и групп объектов

Snap.svg позволяет создавать сложные обрезающие пути, состоящие из нескольких элементов. Для этого необходимо объединить объекты в группу и применить к ней clipPath.

var s = Snap(400, 400);

var rect1 = s.rect(100, 100, 200, 100);
var circle1 = s.circle(200, 200, 50);

// Объединение объектов в группу
var clipGroup = s.group(rect1, circle1);

// Создание clipPath из группы
var clip = s.clip().add(clipGroup);

// Применение к элементу
var rect2 = s.rect(50, 50, 300, 300).attr({
    fill: 'orange',
    'clip-path': clip
});

Особенности:

  • Группировка объектов позволяет комбинировать несколько фигур в одной маске.
  • Порядок объектов в группе может влиять на визуальный результат при наложении прозрачностей.

Анимация clipping path

Snap.svg поддерживает анимацию обрезающих путей с использованием метода .animate(). Это позволяет создавать динамические эффекты, такие как постепенно проявляющиеся фигуры.

var s = Snap(400, 400);

var circle = s.circle(200, 200, 0).attr({
    fill: 'none',
    stroke: '#e74c3c',
    strokeWidth: 5
});

var rect = s.rect(50, 50, 300, 300).attr({
    fill: '#2ecc71'
});

// Создание clipPath
var clip = s.clip().add(circle);
rect.attr({
    'clip-path': clip
});

// Анимация радиуса круга
circle.animate({ r: 150 }, 2000, mina.easeinout);

Особенности:

  • Любой параметр объекта в clipPath может анимироваться.
  • Анимация изменяет видимую область элемента в реальном времени, не меняя исходный объект.

Использование paths в качестве clipPath

Для сложных фигур можно использовать элемент <path>. Это дает полный контроль над формой обрезки.

var s = Snap(400, 400);

var pathClip = s.path("M50,50 C150,0 250,300 350,200 L350,350 Z");

// Элемент, который будет обрезан
var rect = s.rect(0, 0, 400, 400).attr({
    fill: '#9b59b6'
});

// Создание clipPath
var clip = s.clip().add(pathClip);
rect.attr({
    'clip-path': clip
});

Особенности:

  • path может содержать кривые, линии и сложные комбинации сегментов.
  • Использование path позволяет создавать нестандартные, органические формы масок.

Ограничения и нюансы

  1. Наследование трансформаций: Элементы внутри clipPath наследуют трансформации (translate, rotate, scale) из clipPath, но не из элемента, к которому применяется маска.
  2. CSS свойства: Некоторые CSS-свойства, такие как stroke-dasharray или фильтры, применяются к элементу, а не к clipPath.
  3. SVG стандарты: ClipPath работает только с векторными элементами. Использование растровых изображений напрямую в clipPath не поддерживается.

Практическое применение

  • Создание динамических масок для анимаций.
  • Ограничение области видимости сложных графических элементов.
  • Эффекты проявления или скрытия элементов с плавной анимацией.
  • Интерактивные визуальные элементы, например, при наведении курсора или скролле страницы.

Использование clipping paths в Snap.svg обеспечивает высокую гибкость в работе с графикой, позволяя создавать сложные визуальные эффекты без изменения исходной геометрии элементов и сохраняя чистоту SVG-кода.