Отримати нижнє та праве положення елемента


82

Я намагаюся отримати позицію елемента у вікні так:

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;

Однак знизу та праворуч -перед ними є ... Чому це? оскільки цифри правильні, вони НЕ повинні бути мінусовими.

Відповіді:


95

Замість

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

Чому ти не робиш

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

Редагувати: Ваша помилка полягає в тому, що ви робите

bottom = offset.top - bottom;

замість

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

36
var посилання = $ (елемент);
var offset = link.offset ();

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

var bottom = top + link.outerHeight ();
var право = ліво + link.outerWidth ();

7
// 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');

Це знайде відстань від верхньої та лівої частин області перегляду до точного краю вашого елемента і нічого за цим. Отже, скажімо, ваш логотип становив 350 пікселів, а ліве поле - 50 пікселів, змінна „справа“ матиме значення 400, оскільки це фактична відстань у пікселях, необхідна для досягнення краю вашого елемента, незалежно від того, чи є у вас більше відступів або поля праворуч від нього.

Якщо для вашої властивості CSS розміру вікна встановлено значення border-box, вона буде продовжувати працювати так само, як якщо б вона була встановлена ​​як поле вмісту за замовчуванням.


1
Найкраща відповідь для мене!
geoyws

3

Ви можете використовувати .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 немає посилання на атрибут "right" в об'єкті результату для position (). Док тут
Мордхак,

4
Так, але це має бути зміщення замість позиції, зміщення зверху / ліворуч залежно від документа, позиція відноситься до батьківської.
Мордхак,

@Mordhak, так, але, як ви бачите, я використовую windows.width()та подібні для подальших розрахунків.
Starx

1
будьте обережні з положенням. Не враховується запас, якщо він присутній
Andrea_86,

1

Я думаю

<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

у моєму браузері chrome.

Коли документ можна прокручувати, $(window).height()повертає висоту області перегляду браузера, а не ширину документа, деякі частини якого приховані під час прокрутки. Див. Http://api.jquery.com/height/ .


1

Ось функція jquery, яка повертає об’єкт будь-якого класу або ідентифікатора на сторінці

var elementPosition = function(idClass) {
            var element = $(idClass);
            var offset = element.offset();

            return {
                'top': offset.top,
                'right': offset.left + element.outerWidth(),
                'bottom': offset.top + element.outerHeight(),
                'left': offset.left,
            };
        };


        console.log(elementPosition('#my-class-or-id'));

0

Ванільна відповідь Javascript

var c = document.getElementById("myElement").getBoundingClientRect();
var bot = c.bottom;
var rgt = c.right;

Щоб бути зрозумілим, елемент може бути будь-яким, якщо ви призначили йому ідентифікатор <img> <div> <p>тощо.

наприклад

<img
    id='myElement'
    src='/img/logout.png'
    className='logoutImg img-button'
    alt='Logout'
/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.