Snap.svg предоставляет удобные методы для управления интерактивностью SVG-элементов, включая изменение внешнего вида курсора при наведении на объекты. Управление курсором осуществляется через свойства CSS, применяемые к SVG-элементам.
cursorКаждый объект Snap.svg, будь то <circle>,
<rect>, <path> или
<text>, поддерживает метод .attr(). Для
изменения курсора необходимо задать атрибут cursor:
var s = Snap(400, 400);
var circle = s.circle(100, 100, 50);
circle.attr({
fill: "#3498db",
stroke: "#2980b9",
strokeWidth: 3,
cursor: "pointer" // Изменение курсора при наведении
});
Ключевые моменты:
cursor работает с любыми допустимыми значениями
CSS (pointer, default, move,
crosshair, text, wait и
др.).<g>
или применять атрибут ко всем элементам отдельно.hover()Snap.svg позволяет задавать разные стили курсора при наведении и при
уходе мыши через метод .hover():
var rect = s.rect(50, 50, 200, 100, 10, 10).attr({
fill: "#e74c3c"
});
rect.hover(
function() {
this.attr({ cursor: "pointer" });
},
function() {
this.attr({ cursor: "default" });
}
);
Особенности:
mouseenter), второй — при уходе
(mouseleave).Если требуется изменить курсор на уровне всей SVG-сцены, можно применять CSS к контейнеру SVG:
s.node.style.cursor = "crosshair";
Примечания:
s.node возвращает корневой <svg>
элемент, на который можно назначать любые CSS-свойства.<g>)Группы элементов позволяют управлять несколькими объектами одновременно:
var group = s.group(
s.rect(20, 20, 60, 60),
s.circle(100, 50, 30)
);
group.attr({ cursor: "move" });
Преимущества:
cursor применяется ко всей группе, исключая
необходимость устанавливать его для каждого элемента отдельно.Snap.svg поддерживает работу с классами, что позволяет централизованно управлять курсором:
var circle2 = s.circle(200, 200, 40).addClass("interactive");
document.querySelector(".interactive").style.cursor = "pointer";
Особенности:
:hover).В сочетании с методами .click(),
.mousemove() и .drag() можно создавать сложные
интерактивные эффекты:
circle.drag(
function(dx, dy) {
this.attr({ cx: this.data('ox') + dx, cy: this.data('oy') + dy });
},
function() {
this.data('ox', this.attr('cx'));
this.data('oy', this.attr('cy'));
this.attr({ cursor: "move" });
},
function() {
this.attr({ cursor: "pointer" });
}
);
Пояснения:
move..attr({cursor: ...}) — базовое
средство, применяемое к конкретным элементам или группам..hover() — динамическая смена курсора
при наведении и уходе.s.node.style.cursor — глобальное
управление курсором на всей SVG-сцене.Использование этих инструментов позволяет создавать гибкую и наглядную интерактивность SVG, делая элементы визуально отзывчивыми и улучшая взаимодействие с пользователем.