js獲取元素到屏幕左上角的距離


開發過程中經常會遇到 獲取元素到屏幕左上角的距離, 當我們使用jQuery開發時,我們可以使用 $.offset()來獲取准確的距離。

如果我們的項目中並沒有引入jQuer的話,跟希望通過原生方法實現,此時我們使用 offetLeft/offetTop 或者clientLift/clientTop 其實都不能准確的獲取這個距離,這個時候最好就是看看jQ怎么寫的,為什么它就能夠准確的獲取到呢?這就要從$.offset() 源碼看起了。

jQuery對於此功能的實現, 源碼是這樣寫的: 

jQuery.fn.offset = function( options ) {
    if ( arguments.length ) {
        return options === undefined ?
            this :
            this.each(function( i ) {
                jQuery.offset.setOffset( this, options, i );
            });
    }

    var docElem, win,
        elem = this[ 0 ],
        box = { top: 0, left: 0 },
        doc = elem && elem.ownerDocument;

    if ( !doc ) {
        return;
    }

    docElem = doc.documentElement;

    // Make sure it's not a disconnected DOM node
    if ( !jQuery.contains( docElem, elem ) ) {
        return box;
    }

    // If we don't have gBCR, just use 0,0 rather than error
    // BlackBerry 5, iOS 3 (original iPhone)
    if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
        box = elem.getBoundingClientRect();
    }
    win = getWindow( doc );
    return {
        top: box.top + win.pageYOffset - docElem.clientTop,
        left: box.left + win.pageXOffset - docElem.clientLeft
    };
};

 

可以看到,實現此功能的核心代碼是: element.getBoundingClientRect 方法,

從名字上就可以看出,意思就是獲取屏幕邊界,與該元素相關的CSS 邊框集合。

內容截圖如下:

值得一提的是,該方法下 沒有內容的邊框會被忽略。

 想要獲取元素到屏幕左上角距離 可以使用如下方法

var div1 = document.getElementById('div1');
var domRect = {
    offsetLeft:  div1.getBoundingClientRect().left,
    offsetTop:  div1.getBoundingClientRect().top,
}

 

(.)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM