получить нижнюю и правую позицию элемента


66

Я пытаюсь получить позицию элемента в окне, как так:

var link = $(element); 

var offset = link.offset(); 
var top = offset.top; 
var left = offset.left; 
var bottom = $(window).height() - link.height(); 
bottom = offset.top - bottom; 
var right = $(window).width() - link.width(); 
right = offset.left - right; 

Однако нижняя и правая имеют - перед ними ... Почему это? поскольку числа верны, они НЕ должны быть минус.

78

Вместо

var bottom = $(window).height() - link.height(); 
bottom = offset.top - bottom; 

Почему вы не делаете

var bottom = $(window).height() - top - link.height(); 

Edit: Ваша ошибка состоит в том, что вы делаете

bottom = offset.top - bottom; 

вместо

bottom = bottom - offset.top; // or bottom -= offset.top; 

1

Вы можете использовать для этого .position()

var link = $(element); 
var position = link.position(); //cache the position 
var right = $(window).width() - position.left - link.width(); 
var bottom = $(window).height() - position.top - link.height(); 
+4

В jQuery doc в объекте результата для позиции() нет ссылки на атрибут «right». [Doc here] (http://api.jquery.com/position/) 26 мар. 122012-03-26 12:41:59

  0

@Mordhak, обновление должно работать. 26 мар. 122012-03-26 12:45:22

+4

Да, но это должно быть смещено вместо позиции, смещение сверху/слева в зависимости от документа, позиция относится к родительскому. 26 мар. 122012-03-26 12:52:39

  0

@Mordhak, Да, но, как вы видите, я использую 'windows.width()' и аналогичный для дальнейших вычислений. 12 сен. 122012-09-12 07:24:44

+2

'position.right' до сих пор не существует в этом контексте. 24 янв. 142014-01-24 15:30:24


0

Я думаю

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 

<div>Testing</div> 
<div id="result" style="margin:1em 4em; background:rgb(200,200,255); height:500px"></div> 
<div style="background:rgb(200,255,200); height:3000px; width:5000px;"></div> 

<script> 
(function(){ 
    var link=$("#result"); 

    var top = link.offset().top; // position from $(document).offset().top 
    var bottom = top + link.height(); // position from $(document).offset().top 

    var left = link.offset().left; // position from $(document).offset().left 
    var right = left + link.width(); // position from $(document).offset().left 

    var bottomFromBottom = $(document).height() - bottom; 
    // distance from document's bottom 
    var rightFromRight = $(document).width() - right; 
    // distance from document's right 

    var str=""; 
    str+="top: "+top+"<br>"; 
    str+="bottom: "+bottom+"<br>"; 
    str+="left: "+left+"<br>"; 
    str+="right: "+right+"<br>"; 
    str+="bottomFromBottom: "+bottomFromBottom+"<br>"; 
    str+="rightFromRight: "+rightFromRight+"<br>"; 
    link.html(str); 
})(); 
</script> 

Результат являются

top: 44 
bottom: 544 
left: 72 
right: 1277 
bottomFromBottom: 3068 
rightFromRight: 3731 

в хромированной браузере шахты.

Когда документ прокручивается, $(window).height() возвращает высоту окна просмотра браузера, а не ширину документа, из которого некоторые части скрыты в прокрутке. См. http://api.jquery.com/height/.


28
var link = $(element); 
var offset = link.offset(); 

var top = offset.top; 
var left = offset.left; 

var bottom = top + link.outerHeight(); 
var right = left + link.outerWidth();

4
// Returns bottom offset value + or - from viewport top 
function offsetBottom(el, i) { i = i || 0; return $(el)[i].getBoundingClientRect().bottom } 

// Returns right offset value 
function offsetRight(el, i) { i = i || 0; return $(el)[i].getBoundingClientRect().right } 

var bottom = offsetBottom('#logo'); 
var right = offsetRight('#logo'); 

Найдет расстояние от верхней и левой части окна просмотра для точного края вашего элемента и ничего сверх этого. Так что скажем, что ваш логотип был 350px, и у него был левый край 50px, переменная «right» будет содержать значение 400, потому что это фактическое расстояние в пикселях, которое требуется, чтобы добраться до края вашего элемента, независимо от того, есть ли у вас больше отступов или маржа справа от нее.

Если ваш CSS-атрибут размера коробки установлен в рамку-рамку, он будет продолжать работать так же, как если бы он был установлен как содержимое по умолчанию.

  0

Лучший ответ для меня! 23 июн. 162016-06-23 15:34:49