Может ли кто-нибудь показать мне, как получить top
& left
позицию элемента div
или, span
если он не указан?
то есть:
<span id='11a' style='top:55px;' onmouseover="GetPos(this);">stuff</span>
<span id='12a' onmouseover="GetPos(this);">stuff</span>
В приведенном выше случае, если я это сделаю:
document.getElementById('11a').style.top
Значение 55px
возвращается. Однако, если я попробую это для span
«12а», то ничего не вернется.
У меня есть куча div
/ span
s на странице, для которой я не могу указать свойства top
/ left
, но мне нужно отображать div
прямо под этим элементом.
источник
Вы можете вызвать метод
getBoundingClientRect()
по ссылке на элемент. Затем вы можете проверитьtop
,left
,right
и / илиbottom
свойства ...Если вы используете jQuery, вы можете использовать более сжатый код ...
источник
getBoundingClientRect()
Следует использовать +1 для этого ответа - и это должен быть принятый ответ! Но вам не нужен «современный браузер», чтобы это работало, см. Список совместимости, который я показал здесь: stackoverflow.com/questions/1480133/… . Он отлично работает в IE 4.0+ (!), Chrome 1.0+, FF 3.0+, Safari 4.0+ и Opera.getBoundingClientRect()
возвращает значения относительно области просмотра, а не документа. Для этого вам понадобится что-то вродеtop = el.getBoundingClientRect().top + window.pageYOffset - el.ownerDocument.documentElement.clientTop
.getBoundingClientRect
принимаетtransform
во внимание.Хотя ответ @ nickf работает. Если вам не нравятся старые браузеры, вы можете использовать эту чистую версию Javascript. Работает в IE9 + и др.
источник
Как заметил Алекс, вы можете использовать jQuery offset () для получения позиции относительно потока документов. Используйте position () для его координат x, y относительно родителя.
РЕДАКТИРОВАТЬ: переключено
document.ready
на,window.load
потому чтоload
ожидает всех элементов, поэтому вы получаете их размер, а не просто готовите DOM. По моему опыту, этоload
приводит к меньшему количеству неправильно позиционированных элементов Javascript.источник
Для тех, кому нужно только верхнее или левое положение, небольшие изменения в читаемом коде @ Nickf помогут.
и
источник
Я понимаю, что это старая ветка, но ответ @alex необходимо пометить как правильный.
element.getBoundingClientRect()
точно соответствует jQuery$(element).offset()
И он совместим с IE4 + ... https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
источник