Просмотрев похожие вопросы, размещенные на форуме, и не найдя ничего, что помогло бы мне решить мою собственную проблему, я публикую это.
Я использую SVG.js для создания фигур SVG в веб-документе. Я бы хотел, чтобы одна из этих фигур «следовала» за мышью/курсором.
Под этим я подразумеваю: фигура имеет фиксированное положение/точку привязки (в ее исходном центре), и она может перемещаться только на ограниченное расстояние (скажем, 50 пикселей) от этой фиксированной точки. Я хочу, чтобы фигура двигалась в направлении курсора всякий раз, когда курсор перемещается, но не дальше, чем на определенное расстояние от его исходного положения. Я прилагаю короткую анимацию, чтобы проиллюстрировать мое описание:
Если бы курсор исчез, фигура вернулась бы к своему первоначальному центру.
Я хорошо разбираюсь в Javascript, HTML и CSS. Этот тип манипулирования элементами является новым для меня, и математика вызывает у меня головную боль, любая помощь будет отличной.
Похоже, мне нужно, чтобы фигура в основном вращалась вокруг своего исходного центра под углом относительно курсора? Я действительно не уверен, как это решить. Я попытался использовать метод для вычисления угла , описанный в этом сообщении. Моя фигура движется, но не так, как предполагалось:
// init
var draw = SVG().addTo('body')
// draw
window.shape = draw.circle(25, 25).stroke({
color: '#000',
width: 2.5
}).fill("#fff");
shape.attr("id", "circle1");
shape.move(50, 50)
// move
var circle = $("#circle1");
var dist = 10;
$(document).mousemove(function(e) {
// angle
var circleCenter = [circle.offset().left + circle.width() / 2, circle.offset().top + circle.height() / 2];
var angle = Math.atan2(e.clientX - circleCenter[0], -(e.clientY - circleCenter[1])) * (180 / Math.PI);
var x = Math.sin(angle) * dist;
var y = (Math.cos(angle) * dist) * -1;
shape.animate().dmove(x, y);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/svg.js/3.0.16/svg.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Примечание. Для меня не имеет значения, зависит ли решение от jQuery или нет (в идеале — нет).