scrollbarWidth.ts 849 B

123456789101112131415161718192021222324252627282930
  1. import { isWindow } from '/@/utils/is';
  2. let scrollBarWidth: number;
  3. export default function (): number {
  4. if (!isWindow) return 0;
  5. if (scrollBarWidth !== undefined) return scrollBarWidth;
  6. const outer = document.createElement('div');
  7. outer.className = 'scrollbar__wrap';
  8. outer.style.visibility = 'hidden';
  9. outer.style.width = '100px';
  10. outer.style.position = 'absolute';
  11. outer.style.top = '-9999px';
  12. document.body.appendChild(outer);
  13. const widthNoScroll = outer.offsetWidth;
  14. outer.style.overflow = 'scroll';
  15. const inner = document.createElement('div');
  16. inner.style.width = '100%';
  17. outer.appendChild(inner);
  18. const widthWithScroll = inner.offsetWidth;
  19. const parentNode = outer.parentNode;
  20. parentNode && parentNode.removeChild(outer);
  21. scrollBarWidth = widthNoScroll - widthWithScroll;
  22. return scrollBarWidth;
  23. }