jQuery offset top работает неправильно
я пытаюсь создать скрипт, нарисовать что-то в элементе мышью, и я использую Raphaeljs
для этого.
для правильного рисования мне нужно найти top
и left
of input
элемент. Я использую var offset = $("#input").offset();
и left
и top
.
но top
значение неверно. Это 10px
ниже top
расстояние. Я думаю, что 10px
возможно, изменение в разных разрешениях, тогда я не могу добавить 10px
это нормально, то я хочу чтобы знать, как я могу решить проблему!
я загрузил свой тест здесь.
3 ответов
у меня есть два разных решения:
1) вы можете рассчитать общую высоту элемента выше с outerHeight(true), то метод. Этот метод будет вычислять высоту с полями, отступами и границами.
и не будет создавать конфликт, он вернет значение true. вот пример jsFiddle.
HTML-код
<div class="header"></div>
<div class="nav"></div>
<div class="myEle"></div>
jQuery
var myEleTop = $('.header').outerHeight(true) + $('.nav').outerHeight(true);
2) если вы определили top
css к элементу, который расположен относительно тела, вы также можете использовать это значение:
parseInt($('#myEle').css('top'));
после борьбы с этим некоторое время и рассмотрения различных потенциальных ответов я пришел к выводу, что jQuery offset ().топ!--2--> (и предположительно DOM API, который он использует) слишком ненадежен для общего использования. Он не только документирован как исключающий поля уровня html, но и возвращает неожиданные результаты в нескольких других случаях.
position ().топ!--2--> работает, но может быть нецелесообразно / возможно создать страницу так, чтобы она аналог.
к счастью, я нашел это элемент.getBoundingClientRect().топ!--2--> получает положение относительно окна просмотра отлично. Затем вы можете добавить на $(документ).scrollTop() чтобы получить позицию сверху документа, если это необходимо.