Как переместить объект в точку экрана в gsap

У меня есть элемент dom с определенным именем класса, и я пытаюсь переместить этот элемент в определенную точку экрана после того, как пользователь закончил его перетаскивание.

Для этого я планирую создать элемент temp dom в позиции, куда я хочу переместить точку, переместить исходный элемент, а затем удалить элемент temp.

Вот мой код

gsap.registerPlugin(Draggable, MotionPathPlugin)
const selector = ".my-obj";
Draggable.create(selector, {
    type: "x,y",
    onDragEnd: function (e: any) {
        const pointTag = document.createElement("temp-point-tag");
        pointTag.style.position = 'absolute';
        pointTag.style.top = 200 + window.scrollY + "px";
        pointTag.style.left = 400 + window.scrollX + "px";
        pointTag.style.width = "3px"
        pointTag.style.height = "3px"
        pointTag.style.backgroundColor = "red"
        document.body.appendChild(pointTag);

        const point = MotionPathPlugin.convertCoordinates(pointTag, document.querySelector(selector), { x: 0, y: 0 })
        gsap.to(selector, { x: point.x, y: point.y });
    },
});

Мой код не работает должным образом. У него нет статического поведения. Если бы я перетащил объект. он попадает в случайное место экрана, а также может выйти за пределы экрана.

Ожидаемое поведение MotionPathPlugin.convertCoordinates, как я понимаю из документации, заключается в перемещении в {x:0, y:x} относительно координат объекта, которые я указал.

Почему MotionPathPlugin.convertCoordinates не работает? Как правильно переместить объект в определенную точку (x,y) на экране?

Пример кода: я пытаюсь переместить красный квадрат в красную точку после завершения события перетаскивания https://codepen.io/abozanona/pen/wvZMdLd

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
104
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

gsap.registerPlugin(Draggable);
const selector = ".my-obj";
Draggable.create(selector, {
  type: "x,y",
  onDragEnd: function (e) {
    const pointTag = document.createElement("temp-point-tag");
    pointTag.style.position = "absolute";
    pointTag.style.top = "100px";
    pointTag.style.left = "100px";
    pointTag.style.width = "3px";
    pointTag.style.height = "3px";
    pointTag.style.backgroundColor = "red";
    document.body.appendChild(pointTag);

    const point = pointTag.getBoundingClientRect();
    console.info(point);
    gsap.to(selector, { left: point.left, top: point.top, x: 0, y: 0 });
  }
});
.my-obj {
  width: 50px;
  height: 50px;
  position: absolute;
  bottom: 50px;
  left: 50%;
  background-color: red;
  will-change: transform;
}
<div class = "my-obj"></div>

<script src = "https://unpkg.com/gsap@3/dist/Draggable.min.js"></script>

<script src = "https://unpkg.com/gsap@3/dist/CSSRulePlugin.min.js"></script>
<script src = "https://unpkg.co/gsap@3/dist/gsap.min.js"></script>

Вот решение. Я думаю, вам не нужно использовать дополнительные плагины, чтобы просто изменить значения позиции. Вот ссылка на код решения. Ссылка

Другие вопросы по теме