Element分析(工具篇)——ScrollbarWidth

說明

用來獲取滾動條寬度。

源碼解析

import Vue from 'vue';

let scrollBarWidth;

export default function() {
  if (Vue.prototype.$isServer) return 0;  // 服務器端直接返回
  if (scrollBarWidth !== undefined) return scrollBarWidth;  // 如果已經計算過就直接返回之前的

  const outer = document.createElement('div');  // 創建外部的容器
  outer.className = 'el-scrollbar__wrap';  // 同樣會加入overflow: scroll
  outer.style.visibility = 'hidden';  // 不可見
  outer.style.width = '100px';  // 設置一個寬度
  outer.style.position = 'absolute';  // 絕對定位
  outer.style.top = '-9999px';  // 移除可視區域
  document.body.appendChild(outer);  // 插入

  const widthNoScroll = outer.offsetWidth;  // 可是寬度
  outer.style.overflow = 'scroll';  // 會顯示出滾動條

  const inner = document.createElement('div');  // 創建內部
  inner.style.width = '100%';  // 寬度為100%,實際上因為父級有滾動條,父級的 width 會變成 100px - 滾動條寬度
  outer.appendChild(inner);  // 插入

  const widthWithScroll = inner.offsetWidth;  // 內部寬度
  outer.parentNode.removeChild(outer);  // 移除

  return widthNoScroll - widthWithScroll;  // 滾動條寬度
};

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,796評論 1 92
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,229評論 4 61
  • HTML標簽解釋大全 一、HTML標記 標簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,320評論 1 41
  • !~~~終于開始了在Coursera上的第一個編程練習 。。。 下面就是這次作業的介紹了~: Introducti...
    東皇Amrzs閱讀 9,689評論 9 7
  • 1. Eat Thy Neighbour 只看封面設計就能知道內容的一本書。 “食人”是個吸引眼球的題材——很多t...
    一條污蚣閱讀 677評論 0 0