scrollWidth到底是什么???


貼上MDN對scrollwidth的定義:

The Element.scrollWidth read-only property is a measurement of the width of an element's content, including content not visible on the screen due to overflow.

自譯:element.scrollWidth這個只讀屬性是用來測量元素內容寬度的一種方式,它包括了被overflow屬性隱藏的不可見的寬度.

The scrollWidth value is equal to the minimum width the element would require in order to fit all the content in the viewport without using a horizontal scrollbar. The width is measured in the same way as clientWidth: it includes the element's padding, but not its border, margin or vertical scrollbar (if present). It can also include the width of pseudo-elements such as ::before or ::after. If the element's content can fit without a need for horizontal scrollbar, its scrollWidth is equal to clientWidth.

自譯:scrollWidth值等於元素的最小寬度要求內容與視口相適,不使用水平的滾動條(意思應該就元素內容不要太大導致水平滾動條出現吧).這個寬度的測量方式與clientWidth方式一樣,包括元素的內邊距,不包括邊框,外邊距,垂直滾動條(如果有出現的話).它也可以包括包括偽元素的寬度例如::before或::after.如果元素的內容剛好合適不需要水平滾動條,那么scrollwidth就等於clientWdth.

 

看的似懂非懂,直接代碼測試:

html部分略
<script>
    var box = document.getElementById("box");
    // 頁面可視區的寬度
    var oClientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;

    // 頁面可視區的高度
    var oClientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;

    // scrollTop 網頁被卷起的高度
    var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;

    // scrollLeft 網頁左邊被卷起的寬度
    var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;

    // scrollWidth 表示整個網頁正文的寬度
    var scrollWidth = document.documentElement.scrollWidth || document.body.scrollWidth;

    // scrollHeight 表示整個網頁正文的高度
    var scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;

    box.onclick = function(e){
      var oEvent = e || event;
      console.log('相對顯示器左邊的位置screenX為:' + oEvent.screenX);              //95
      console.log('相對顯示器上邊的位置screenY為:' + oEvent.screenY);              //152
      console.log('相對可視區左邊的位置clientX為:' + oEvent.clientX);              //95
      console.log('相對可視區上邊的位置clientY為:' + oEvent.clientY);              //61
      console.log('可視區寬度clientWidth為:' + oClientWidth);                       //1920
      console.log('可視區高度clientHeight為:' + oClientHeight);                     //535
      console.log('點擊位置在頁面中的縱坐標為:' + (oEvent.clientY + scrollTop));   //1461
      console.log('點擊位置在頁面中的橫坐標為:' + (scrollLeft + oEvent.clientX));  //95
      console.log('頁面卷起的高度scrollTop為:' + scrollTop);                        //1400
      console.log('頁面左邊卷起的寬度為scrollLeft為:' + scrollLeft);               //0
      alert('盒子的寬度為scrollWideth為:' + box.scrollWidth);                    //3000
      alert('頁面的寬度為scrollWideth為:' + scrollWidth);  
      console.log('頁面的高度為scrollHeight為:' + scrollHeight);                   //5000
      console.log('點擊位置相對頁面位置的左邊pageX為:' + oEvent.pageX);             //95
      console.log('點擊位置相對頁面位置的上邊pageY為:' + oEvent.pageY);             //1461
              //1461
          }
</script>

 

1.盒子大小<body大小<瀏覽器窗口大小

a)        當body/html調用scrollwidth:

chrome, ie6-ie11:

body.scrollWidth=瀏覽器可視窗口寬度(clientWidth)--滾動條欄的寬度

b)        當盒子調用:

chrome, ie6-ie11:

box.scrollwidth=width+padding

2.盒子大小<瀏覽器窗口大小< body大小

a)        body/html調用scrollwidth:

chrome, ie6-ie11:

body.scrollWidth=body.width+ body.padding+ body.border+左邊的margin

(只對body的值進行累計,如果box有margin撐大了body也把box.margin的寬度不會計算進來)

b)        當盒子調用:

chrome, ie6-ie11:

box.scrollwidth=width+padding;

3.瀏覽器窗口大小<盒子大小< body大小

同情況2

4.body大小<盒子大小<瀏覽器窗口大小

chrome,ie11:

body.scrollWidth=瀏覽器可視窗口寬度--滾動條欄的寬度

box.scrollwidth=width+padding;

5.body大小<瀏覽器窗口大小<盒子大小

chrome,ie11:

body.scrollWidth=body.width+ body padding+ body.margin+body.leftpadding+body.leftboder+body.leftmargin;

box.scrollWidth=width+padding;

6.瀏覽器窗口大小 < body大小 <盒子大小

chrome,ie11:

body.scrollWidth= box.width+ box.padding+ box.margin+body.leftpadding+body.leftboder+body.leftmargin;

box.scrollWidth=box.width+box.padding;

 

總結:

看了很多資料說是clientWidth是可視區域大小其實也是包括了滾動條欄的寬度.

不管啥情況:box.scrollWidth=box.width+box.padding;

如果瀏覽器的窗口寬度最大:

body.scrollWidth=瀏覽器窗口大小(clientWidth)-右側滾動條欄寬度(一般是17px);

如果是body的寬度(border+padding)最大:

body.scrollWidth=body.width+ body.padding+ body.border+左邊的margin;

如果是盒子的寬度(border+padding)最大:

body.scrollWidth= box.width+ box.padding+ box.margin+body.leftpadding+body.leftboder+body.leftmargin;

 


免責聲明!

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



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