scroll家族屬性


上一篇主要分析了一下offset家族屬性,本篇文章則主要是來分析一下scroll家族屬性。

首先,scroll家族包括4個屬性:

  • 網頁正文寬度:document.body.scrollWidth;
  • 網頁正文高度:document.body.scrollHeight;
  • 網頁被卷去的高:document.body.scrollTop;
  • 網頁被卷去的左:document.body.scrollLeft;

接下來,我們先簡單看一下相關屬性。

例1:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        body{
            height: 3000px;
        }
    </style>
</head>
<body>
<script type="text/html">
console.log(document.documentElement.scrollTop, document.documentElement.scrollLeft);
</script>
</body>
</html>

在谷歌瀏覽器下面,我們會發現,雖然有滾動條,甚至在滾動時候,都沒有打印值,那是因為我們在滾動的時候是觸發的滾動事件,所以我們需要監聽的是滾動事件。

因此,我們將上面的代碼稍作修改。將js部分改為下面的這樣的。

例2:

<script type="text/html">
    window.onscroll = function () {
        console.log(document.documentElement.scrollTop, document.documentElement.scrollLeft);
    }
</script>

此時,我們就可以監聽到瀏覽器的滾動事件相應的值了,

封裝scroll

其實,在實際運用過程中,為了處理不同瀏覽器的差距,我們用來表示scroll的值的方式有所不同,這需要從瀏覽器的模式說起。早期的瀏覽器在對css進行解析的時候,並未遵循W3C標准,這時的解析方式被稱為怪異模式(quirks),后來隨着W3C的標准越來越重要,眾多的瀏覽器開始遵循W3C標准解析css,此時我們稱為嚴格模式(strict mode)。

我們可以通過document.compatMode的值來判斷是否處於標准模式,從而決定用什么方式獲取相應的scroll值。

例3:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            height: 3000px;
        }
    </style>
</head>
<body>

<script>
    function scroll() {
        if(window.pageYOffset !== null){
            return {
                top: window.pageYOffset,
                left: window.pageXOffset
            }
        }else if(document.compatMode === "CSS1Compat"){ // W3C
            return {
                top: document.documentElement.scrollTop,
                left: document.documentElement.scrollLeft
            }
        }else{
            return {
                top: document.body.scrollTop,
                left: document.body.scrollLeft
            }
        }  
    }

    window.onscroll = function () {
        console.log(scroll().top);
    }
</script>
</body>
</html>

在上面的代碼中,我們通過判斷不同的模式使用不同的方法獲取scroll的值,並將這種方法進行封裝,方便調用,這樣就可以快速處理不同瀏覽器中的兼容性問題,獲取我們需要的值了。


免責聲明!

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



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