@antonowano
Профессиональный самоучка

Событие drag в масштабированном svg или как поспеть за мышкой?

Есть svg с картинкой на фоне. SVG масштабируется в зависимости от размера браузера с помощью атрибута viewBox у svg элемента. Также кроме картинки есть несколько элементов в svg на которых висит событие drag. Если масштаб меньше оригинального размера svg (указанного в viewBox) то при попытке мышкой перетащить элемент, он не поспевает за мышкой, так как перемещается относительно размеров указанных в viewBox, а не html.
Можете что-нибудь посоветовать?
  • Вопрос задан
  • 510 просмотров
Решения вопроса 1
@GreatRash
Конвертация координат мыши в координаты SVG:

function getCursorPosition(event, svgElement) {
  var svgPoint = svgElement.createSVGPoint();

  svgPoint.x = event.clientX;
  svgPoint.y = event.clientY;

  return svgPoint.matrixTransform(svgElement.getScreenCTM().inverse());
}

// пример использования
var svg = document.querySelector('svg');

svg.addEventListener('mousemove', function(e) {
  var cursor = getCursorPosition(e, svg);
  
  console.log(cursor);
}, false);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы