javascript - 關於捲軸和clientHeight
天蓬老师
天蓬老师 2017-05-19 10:47:31
0
1
694

滾動條這個小妖精實在太磨人了,關於它到底佔用哪兒的位置,我找到這樣一篇博客,根據實踐結果也似乎是這麼回事:

捲軸佔據的是content的位置,但顯示時是貼邊顯示。 (根據實際效果是貼著border顯示,在border內部)

#然後js裡有一個clientHeight,MDN的定義是:

Element.clientWidth 屬性表示元素的內部寬度,以像素為單位。此屬性包括內邊距,但不包括垂直捲軸(如果有的話)、邊框和外邊距。

這屬性有毛用啊,比如說我有一粉紅色p,寬高100px,padding-right是20px(藍色部分),clientWidth就是內部寬度83px(100-17,17是滾動條寬度)加上padding-right的20px,等於103px,要這玩意兒有什麼用啊? !中間還夾著個電燈泡滾動條就不要了是鬧哪樣啊?

#這個屬性有什麼實際用途嗎?我覺得用這獲取視口寬高很不靠譜啊,為什麼js高程上用body.clientWidth取得頁面視口大小啊?

PS,請問哪裡有關於捲軸的標準官方特性描述嗎?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(1)
Peter_Zhu

一、瀏覽器視窗

body{
  width: 2000px;
  height: 3000px;
}
document.body.clientWidth//输出2000

此時,這樣取得的body標籤的寬度,不是什麼視口大小

document.documentElement.clientWidth 

上面這個是不帶垂直滾動條寬度(一般為17)的瀏覽器視窗寬度,它也不包括瀏覽器外邊框。

window.innerWidth

這個則是瀏覽器視窗內可見區域寬度,當沒有垂直滾動條時,它與document.documentElement.clientWidth完全一樣,如果有垂直滾動條,它會包含垂直滾動條寬度(一般為17)。

所以如果要取得垂直捲軸寬度,可以:

window.innerWidth - document.documentElement.clientWidth

二,在某個p元素中
html

  <p class="demo">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora voluptatem similique earum ipsam expedita neque excepturi provident id. Quam, perspiciatis, cumque. Fugiat, iste, alias? Ea quo explicabo pariatur voluptatibus omnis.</p>

css

  .demo {
    width: 100px;
    height: 200px;
    overflow-y: scroll;
    padding: 10px;
  }

js

  let demo = document.querySelector('.demo');
  let noScrollWidth = demo.clientWidth; //不含垂直滚动条宽度
  let hasScrollWidth = demo.offsetWidth; //包含垂直滚动条宽度-整个p的实际宽度

  let scrollWidth = hasScrollWidth - noScrollWidth; //垂直滚动条的宽度
  console.log(scrollWidth);

如果你要獲取某個p的實際寬高,不管它是否有滾動條,應該用offsetWidth、offserHeight
而clientWidth則可用於計算垂直滾動條實際寬度(有時垂直滾動條的寬度是自自定義的,就不是預設的17了)

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板