Просматривая похожие вопросы, опубликованные на форуме, и не найдя что-то, что помогло мне решить мою собственную проблему, я публикую это.
Я использую 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 или нет (в идеале это не так).