vben
2021-01-01 0419a070413be34ea5455ed955fa51d8c522da86
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import { isWindow } from '/@/utils/is';
 
let scrollBarWidth: number;
 
export default function (): number {
  if (!isWindow) return 0;
  if (scrollBarWidth !== undefined) return scrollBarWidth;
 
  const outer = document.createElement('div');
  outer.className = 'scrollbar__wrap';
  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%';
  outer.appendChild(inner);
 
  const widthWithScroll = inner.offsetWidth;
  const parentNode = outer.parentNode;
  parentNode && parentNode.removeChild(outer);
  scrollBarWidth = widthNoScroll - widthWithScroll;
 
  return scrollBarWidth;
}