SVG.js предоставляет мощные средства для управления элементами SVG, включая возможность динамически менять стиль курсора при наведении на графические объекты. Это особенно полезно для создания интерактивных интерфейсов и визуализаций.
style()Каждый элемент SVG в SVG.js наследует методы для работы со стилями.
Метод style() позволяет задавать CSS-свойства напрямую.
const draw = SVG().addTo('body').size(400, 400);
const rect = draw.rect(100, 100).fill('#3498db');
// Установка курсора "pointer" при наведении
rect.style('cursor', 'pointer');
Ключевые моменты:
cursor поддерживает стандартные значения CSS:
default, pointer, crosshair,
move, text и другие.style() позволяет как задавать отдельное
свойство, так и несколько через объект:rect.style({ cursor: 'crosshair', fill: '#e74c3c' });
SVG.js интегрируется с системой событий JavaScript. Курсор можно менять при наведении, клике или уходе мыши с элемента.
rect.on('mouseover', () => rect.style('cursor', 'grab'));
rect.on('mouseout', () => rect.style('cursor', 'default'));
rect.on('mousedown', () => rect.style('cursor', 'grabbing'));
rect.on('mouseup', () => rect.style('cursor', 'grab'));
Особенности:
mouseover и mouseout позволяют
реализовать визуальные эффекты при наведении.mousedown и mouseup полезны для
создания интерактивных перетаскиваемых объектов.SVG.js позволяет объединять элементы в группы (group).
Для группы можно назначить стиль курсора, который автоматически
применяется ко всем вложенным элементам.
const group = draw.group();
const circle = draw.circle(80).fill('#2ecc71');
const ellipse = draw.ellipse(100, 50).fill('#f1c40f');
group.add(circle).add(ellipse);
group.style('cursor', 'move');
При наведении на любой элемент группы курсор меняется на
move.
SVG.js поддерживает работу с классами, что позволяет задавать курсор через CSS.
rect.addClass('interactive');
// CSS
/*
.interactive {
cursor: pointer;
}
*/
Преимущества подхода через классы:
Для более сложных интерфейсов можно использовать собственные изображения курсоров.
rect.style('cursor', 'url(cursor.png), auto');
Особенности:
url() указывает путь к изображению курсора.auto) используется в случае, если
изображение не загрузилось..png
или .cur с размерами 32x32 пикселя для корректного
отображения.SVG.js в сочетании с курсорами позволяет реализовать функционал перетаскивания:
rect.draggable();
rect.on('dragstart', () => rect.style('cursor', 'grabbing'));
rect.on('dragend', () => rect.style('cursor', 'grab'));
draggable() активирует возможность перемещения
элемента.dragstart и dragend позволяют
динамически менять курсор, создавая естественный визуальный отклик.pointer для кликабельных объектов,
move для перемещения, text для текстовых
областей.style() подходит для единичных
элементов, тогда как CSS-классы удобны для
групп.Такой подход позволяет создавать интуитивно понятные и визуально приятные интерактивные SVG-интерфейсы, полностью управляя поведением курсора на элементах.