Element.offsetTop неожиданно увеличивается

Несмотря на то, что я нашел ответ, я создаю этот вопрос, чтобы другие могли узнать, есть ли у них такая же проблема.

Я создаю веб-страницу как инструмент для использования в другом проекте; цель состоит в том, чтобы позволить мне манипулировать текстом, наложенным на изображение, и отображать информацию о тексте, такую ​​как его верхний и левый атрибуты.

Я столкнулся с проблемой при реализации метода W3 для создания перетаскиваемых элементов. При перетаскивании элемента его левое значение изменится, как и ожидалось, но верхнее значение будет увеличиваться на 16 для каждого вызова elementDrag(e), в частности, для каждого использования elmnt.style.top = (elmnt.offsetTop - pos2) + "px";. Я пробовал много вещей и думал, что схожу с ума, пока не нашел простое решение на этой странице. Причина проблемы заключалась в том, что перетаскиваемый элемент имел отступ в 16 пикселей, поэтому elmnt.offsetTop всегда будет на 16 пикселей больше, чем elmnt.style.top.

Вот страница в скрипке если хотите посмотреть на мою проблему своими глазами. Это все еще WIP, и я новичок, поэтому он не очень отточен.

  1. Введите текст в поле ввода слева от «Введите здесь».
  2. Нажмите Enter или нажмите кнопку «Отправить».
  3. Нажмите на текст, который находится над отсутствующим изображением
  4. Затем нажмите и перетащите, как обычно.
  5. Если вы хотите воспроизвести проблему, удалите margin: 0px; из CSS для «.overlayText».
Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Перетаскиваемый элемент <p> по умолчанию имел поле 16 пикселей, поэтому elmnt.offsetTop всегда будет на 16 пикселей больше, чем elmnt.style.top. Это исправляется добавлением margin: 0px; в CSS для класса .overlayText.

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