簡體   English   中英

如何檢測瀏覽器 window 上是否有滾動條?

[英]How do I detect if there are scrollbars on a browser window?

我需要能夠檢測瀏覽器 window 上是否有滾動條(垂直和水平)。 我一直在使用此代碼,但它在 Firefox 5 中無法可靠運行。

JFL.GetScrollbarState = function () {
    var myWidth = 0;
    var myHeight = 0;
    if (document.documentElement && document.documentElement.clientWidth) {
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    } else {
        myWidth = document.body.clientWidth;
        myHeight = document.body.clientHeight;
    }
    return ({
        vScrollbar: document.body.scrollHeight > myHeight,
        hScrollbar: document.body.scrollWidth > myWidth
    });
}

有沒有更好的方法可以跨瀏覽器工作。 我的瀏覽器目標是 Firefox 4-5、Chrome、Safari 4+、Opera 10+。

如果您對為什么我需要知道是否有滾動條感興趣,那是因為我有一些旋轉的 CSS3 過渡(由於它們的旋轉性質)可能暫時 go 超出當前文檔大小的邊緣(從而使文檔暫時較大)。 如果最初沒有滾動條,CSS3 過渡可能會導致滾動條在過渡期間出現,然后在過渡完成后 go 消失,從而導致丑陋的滾動條 ZA39401275D1B3040AA789FB22AEA41。 如果我知道不存在滾動條,我可以臨時添加一個 class 將溢出-x 或溢出-y 設置為隱藏,從而防止在 Z2BE25667A86187FFE0B9A61DD3C8573D 過渡期間滾動條 flash。 如果滾動條已經存在,我不需要做任何事情,因為它們可能會移動一點,但在過渡期間它們不會 go 開/關。

如果一個人實際上不僅可以判斷是否通常需要滾動條,而且可以判斷它們是否真的存在,那么獎勵積分。

在某些瀏覽器(Safari 和 IE)中遇到了 David 提出的滾動版本的閃爍問題后,我已經確定了這段沒有閃爍問題的代碼:

function getScrollBarState() {
    var result = {vScrollbar: true, hScrollbar: true};
    try {
        var root = document.compatMode=='BackCompat'? document.body : document.documentElement;
        result.vScrollbar = root.scrollHeight > root.clientHeight;
        result.hScrollbar = root.scrollWidth > root.clientWidth;
    } catch(e) {}
    return(result);
}

這是我所使用的衍生產品,並且在 fanfavorite 發布的帖子中引用了一般技術。 即使在 IE6 中,它似乎也適用於我嘗試過的所有瀏覽器。 出於我的目的,我希望任何失敗都返回有滾動條,所以我以這種方式對失敗條件進行了編碼。

注意:此代碼不會檢測是否已使用 CSS 強制打開或關閉滾動條。 此代碼檢測是否調用了自動滾動條。 如果您的頁面可能具有控制滾動條的 CSS 設置,那么您可以獲取 CSS 並首先檢查它。

這實際上很容易。 這適用於每個現代瀏覽器:

// try scrolling by 1 both vertically and horizontally
window.scrollTo(1,1);

// did we move vertically?
if (window.pageYOffset != 0) {
 console.log("houston, we have vertical scrollbars");
}

// did we move horizontally?
if (window.pageXOffset != 0) {
 console.log("houston, we have horizontal scrollbars");
}

// reset window to default scroll state
window.scrollTo(0,0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM