Frage

Wie die Offset-Client Position eines Elements mit Javascript zu finden? (Ich gehe davon aus dem gleichen Code kann in einem BHO oder Gecko / NPAPI geschrieben werden).

Das Problem, das ich bin vor einem Weg, um die Offset-Client-Position des Elements zu erfahren. Die e.srcElement.offsetX/Y gibt nicht den richtigen Wert immer (das gleiche gilt für clientX / Y). In einigen Fällen müssen wir auch das übergeordnete Element blättern berücksichtigen.

Wie tun wir dies im Allgemeinen? Gibt es eine einfache Art und Weise für das?

War es hilfreich?

Lösung

function getElementTop ( Elem ) 
{
    var elem;

    if ( document.getElementById ) 
    {   
        elem = document.getElementById ( Elem );
    } 
    else if ( document.all ) 
    {
        elem = document.all[Elem];
    }           

    yPos = elem.offsetTop;
    tempEl = elem.offsetParent;

    while ( tempEl != null ) 
    {
        yPos += tempEl.offsetTop;
        tempEl = tempEl.offsetParent;
    }  

    return yPos;
}   


function getElementLeft ( Elem ) 
{
    var elem;

    if ( document.getElementById ) 
    {
        var elem = document.getElementById ( Elem );
    } 
    else if ( document.all )
    {
        var elem = document.all[Elem];
    }           

    xPos = elem.offsetLeft;
    tempEl = elem.offsetParent;         

    while ( tempEl != null ) 
    {
        xPos += tempEl.offsetLeft;
        tempEl = tempEl.offsetParent;
    }           
    return xPos;
}

Führen Sie die Element-ID auf die Funktionen.

Andere Tipps

Sehen Sie den Code unten:

function getOffsetSum(elem) {
    var top=0, left=0;
    while(elem) {
        top = top + parseInt(elem.offsetTop);
        left = left + parseInt(elem.offsetLeft);
        elem = elem.offsetParent;
    }
    return {top: top, left: left};
}

Scrollen zu schließen, einen Blick auf diesen jQuery Event-Listener nehmen Sie die scrollTop und die Offset loggt sein.

// Don't put this in the scroll event listener callback, or that will be unnecessarily performance intensive.
var offset = $("#id").offset().top;

$(window).bind("scroll", function() {

 console.log(
  $(window).scrollTop() + 
  offset
 );

});

den Offset allein zu bekommen,

("#id").offset().top;

Coffee Version von Orhun Alp Oral Antwort :

getOffset = (elem)->
    top = 0
    left = 0
    while elem
        top += parseInt(elem.offsetTop)
        left += parseInt(elem.offsetLeft)
        elem = elem.offsetParent
    {top, left}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top