jQuery получить расположение элемента относительно окна



учитывая HTML DOM ID, как получить позицию элемента относительно окна в JavaScript / JQuery? Это не то же самое, что относительно документа или смещения родителя, так как элемент может быть внутри iframe или некоторых других элементов. Мне нужно получить расположение экрана прямоугольника элемента (как в положении и измерении), как он отображается в настоящее время. Отрицательные значения допустимы, если элемент в настоящее время находится вне экрана (были прокручены).



Это для приложения iPad (WebKit / WebView). Всякий раз, когда пользователь нажимает на специальную ссылку в UIWebView, Я должен открыть диалоговое окно, которое отображает дополнительную информацию о ссылке. В представлении popover должна отображаться стрелка, указывающая на ту часть экрана, которая ее вызывает.

810   7  

7 ответов:

первоначально, возьмите .смещение положение элемента и вычислить его относительное положение относительно окна

см.:
1. смещение
2. свиток
3. scrollTop

вы можете попробовать это скрипка

следующие несколько строк кода объясняет, как это может быть решено

, когда .прокрутите выполняется событие, вычисляется относительное положение элемента относительно объекта window

$(window).scroll(function () {
    console.log(eTop - $(window).scrollTop());
});

когда прокрутка выполняется в браузере, мы вызываем вышеуказанную функцию обработчика событий

код


function log(txt) {
  $("#log").html("location : <b>" + txt + "</b> px")
}

$(function() {
  var eTop = $('#element').offset().top; //get the offset top of the element
  log(eTop - $(window).scrollTop()); //position of the ele w.r.t window

  $(window).scroll(function() { //when window is scrolled
    log(eTop - $(window).scrollTop());
  });
});
#element {
  margin: 140px;
  text-align: center;
  padding: 5px;
  width: 200px;
  height: 200px;
  border: 1px solid #0099f9;
  border-radius: 3px;
  background: #444;
  color: #0099d9;
  opacity: 0.6;
}
#log {
  position: fixed;
  top: 40px;
  left: 40px;
  color: #333;
}
#scroll {
  position: fixed;
  bottom: 10px;
  right: 10px;
  border: 1px solid #000;
  border-radius: 2px;
  padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="log"></div>

<div id="element">Hello
  <hr>World</div>
<div id="scroll">Scroll Down</div>

попробуйте ограничивающую рамку. Все просто:

var leftPos  = $("#element")[0].getBoundingClientRect().left   + $(window)['scrollLeft']();
var rightPos = $("#element")[0].getBoundingClientRect().right  + $(window)['scrollLeft']();
var topPos   = $("#element")[0].getBoundingClientRect().top    + $(window)['scrollTop']();
var bottomPos= $("#element")[0].getBoundingClientRect().bottom + $(window)['scrollTop']();
function getWindowRelativeOffset(parentWindow, elem) {
        var offset = {
            left : 0,
            top : 0
        };
        // relative to the target field's document
        offset.left = elem.getBoundingClientRect().left;
        offset.top = elem.getBoundingClientRect().top;
        // now we will calculate according to the current document, this current
        // document might be same as the document of target field or it may be
        // parent of the document of the target field
        var childWindow = elem.document.frames.window;
        while (childWindow != parentWindow) {
            offset.left = offset.left + childWindow.frameElement.getBoundingClientRect().left;
            offset.top = offset.top + childWindow.frameElement.getBoundingClientRect().top;
            childWindow = childWindow.parent;
        }
        return offset;
    };

вы можете назвать это так

getWindowRelativeOffset(top, inputElement);

я фокусируюсь на IE только в соответствии с моим требованием, но подобное можно сделать для других браузеров

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

в противном случае, если вы хотите сделать это самостоятельно, вы можете использовать jQuery в .position(). Подробнее о .position() включен http://api.jquery.com/position/

$("#element").position(); возвращает текущее положение элемента относительно смещения родитель.

есть также jQuery .offset (); который вернет позицию относительно документа.

TL; DR

headroom_by_jQuery = $('#id').offset().top - $(window).scrollTop();

headroom_by_DOM = $('#id')[0].getBoundingClientRect().top;   // if no iframe

.getBoundingClientRect() кажется универсальная. .offset () и .scrollTop() поддерживаются начиная с jQuery 1.2. Спасибо @user372551 и @prograhammer. Чтобы использовать DOM в iframe см. @ImranAnsari это!--7-->.

    function trbl(e, relative) {
            var r = $(e).get(0).getBoundingClientRect(); relative = $(relative);

            return {
                    t : r.top    + relative['scrollTop'] (),
                    r : r.right  + relative['scrollLeft'](),
                    b : r.bottom + relative['scrollTop'] (),
                    l : r.left   + relative['scrollLeft']() 

            }
    }

    // Example
    trbl(e, window);

попробуйте это, чтобы получить положение элемента относительно окна.

        $("button").click(function(){
            var offset = $("#simplebox").offset();
            alert("Current position of the box is: (left: " + offset.left + ", top: " + offset.top + ")");
        });
    #simplebox{
        width:150px;
        height:100px;
        background: #FBBC09;
        margin: 150px 100px;
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button">Get Box Position</button>
    <p><strong>Note:</strong> Play with the value of margin property to see how the jQuery offest() method works.</p>
    <div id="simplebox"></div>

Посмотреть больше @ получить положение элемента относительно документа с помощью jQuery

Comments

    Ничего не найдено.