Библиотека SVG.js предоставляет удобные методы для
работы с векторной графикой на веб-странице, включая поддержку событий
мыши. Любой SVG-элемент, созданный через SVG.js, может отслеживать
события click, mousemove,
mouseenter, mouseleave и другие, что делает
интерактивные интерфейсы простыми в реализации.
clickМетод on() позволяет назначить обработчик события на
конкретный SVG-элемент:
const draw = SVG().addTo('body').size(600, 400);
const rect = draw.rect(100, 100).fill('#f06');
rect.on('click', function(event) {
console.log('Клик по прямоугольнику', event);
});
Особенности:
on() является тип события
('click', 'mousemove',
'mouseenter' и т.д.).event,
содержащий координаты курсора, целевой элемент и дополнительные
свойства.rect.on('click', (event) => {
this.fill({ color: '#0f6' }); // 'this' ссылается на элемент в обычной функции, но в стрелочной контекст будет внешним
});
mouseenter и mouseleaveSVG.js позволяет легко реализовать эффекты при наведении курсора:
rect.on('mouseenter', function() {
this.fill({ color: '#0f6' });
});
rect.on('mouseleave', function() {
this.fill({ color: '#f06' });
});
Ключевые моменты:
mouseenter срабатывает один раз при входе курсора в
границы элемента.mouseleave срабатывает при выходе курсора за пределы
элемента.mousemoveСобытие mousemove позволяет реагировать на движение
курсора относительно элемента:
rect.on('mousemove', function(event) {
const { offsetX, offsetY } = event;
console.log(`Координаты мыши: X=${offsetX}, Y=${offsetY}`);
});
Особенности:
offsetX и offsetY дают координаты курсора
относительно элемента.clientX и
clientY.off()Метод off() позволяет удалять обработчики событий, что
важно для управления ресурсами и предотвращения утечек памяти:
function handleClick(event) {
console.log('Обработчик сработал');
}
rect.on('click', handleClick);
// Удаление обработчика
rect.off('click', handleClick);
Особенности:
off() удаляет все
обработчики указанного типа.SVG.js поддерживает группировку элементов через group(),
что позволяет подписывать обработчики сразу на несколько объектов:
const group = draw.group();
const circle1 = draw.circle(50).fill('#0f6').move(50, 50);
const circle2 = draw.circle(50).fill('#06f').move(150, 50);
group.add(circle1).add(circle2);
group.on('click', function() {
console.log('Клик по группе элементов');
});
Ключевые моменты:
SVG.js позволяет связывать с элементами собственные данные и использовать их внутри обработчиков:
rect.data('id', 42);
rect.on('click', function(event) {
const id = this.data('id');
console.log('ID элемента:', id);
});
Особенности:
data() хранит произвольные значения, доступные
через обработчики.Для работы на сенсорных экранах события мыши можно комбинировать с
touchstart, touchmove,
touchend:
rect.on('touchstart', function(event) {
console.log('Элемент коснутся пальцем');
});
touches с координатами
касаний.Эти возможности делают SVG.js мощным инструментом для построения интерактивных векторных интерфейсов с полной поддержкой событий мыши и касаний.